码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript 高级程序设计读书笔记(1)

时间:2017-07-08 10:10:52      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:blog   tab   class   描述   对象   控制   程序   修改属性   des   

第6章 面向对象的程序设计

属性的类型

JS 中对象的属性有两种,数据属性和访问器属性(accessor property ),属性有其自身的特性(arrribute),可以理解为关于属性的属性。

数据属性包含4个特性,分别是[[Configurable]], [[Enumerable]], [[Writable]], [[Value]]。

使用 Object.defineProperty 修改属性描述符时,若该属性之前不存在,除了代码里指定的特性值,其他特性值默认将是 false, 举例如下:

let obj = {};
obj.name = ‘test‘;
Object.defineProperty(obj, ‘age‘, {
    writable: false
});
Object.getOwnPropertyDescriptor(obj, ‘age‘);
// 控制台输出信息如下:注意四个特性值均为 false
Object {value: undefined, writable: false, enumerable: false, configurable: false}

 访问器属性不能直接定义,必须使用 Object.defineProperty 来定义,包含4个特性,分别是[[Configurable]], [[Enumerable]], [[Get]], [[Set]]。试举例如下:

// 使用访问器属性的常见方式:设置一个属性的值会导致其他属性发生变化
let book = { _year: 2004, edition: 1 }; Object.defineProperty(book, ‘year‘, { get: function() { return this._year }, set: function(newValue) { if (newValue>2004) { this._year = newValue; this.edition += newValue - 2004; } } });

虽然我们也可以直接通过 book._year 访问,修改该属性,但是_year前面的下划线是一种常用记号,表示只能通过对象方法访问的属性,注意这是一种约定而不是语言本身的限制。

 

JavaScript 高级程序设计读书笔记(1)

标签:blog   tab   class   描述   对象   控制   程序   修改属性   des   

原文地址:http://www.cnblogs.com/waniya/p/7134087.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!