- 访问器属性
访问器属性不包含数据值,他们包含一堆getter和setter函数
- 在读取访问属性时,会调用getter函数,这个函数负责返回有效的值;
- 在写入访问器属性时,会调用setter函数并传入新值,这个函数负责决定如何处理数据
- [[Configurable]] 默认true, 表示可以通过delete来删除属性从而重新定义该属性
- [[Enumerable]] 默认true: 表示可以通过for-in循环返回属性
- [[Get]] 默认值为undefined
- [[Set]] 默认值为undefined
=====================================================
应用:设置一个属性的值会导致其他属性发生变化
在这个例子中,edition的值随着year属性变化
var book = {
_year:2004,
// 编程约定:带下划线的属性要通过方法来访问
edition:1
};
// 定义一个新的属性”year“ , 为它设置访问器属性
Object.defineProperty(book,"year",{
get: function(){
return this._year;
}
set: function(newValue) {
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
});
book.year = 2020;
alert(book.edition);
-
数据属性
- [[Configurable]] configurable 表示该属性特征是否可以修改
- [[Enumerable]] enumerable
- [[Wriable]] writable
- [[Value]] 保存值 value
注意事项:
- 可以使用Object.defineProperty()来修改属性的默认特征
- configurable默认值为true, 当改为false后,不能再次修改
参考:
- 《JavaScript程序设计第3版》