首页 > 代码库 > JavaScript 高级程序设计读书笔记(1)

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

第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)