// 访问器属性不能直接定义 它包含的是一对get和set方法
// 四个特性 Configurable 默认是false Enumerable 默认也是false
// get 读取访问器属性会触发get方法 修改定义访问器属性会触发set方法
var obj={
_year:2000,// _year表示obj对象的私有属性
editor:1
}
// 访问器属性 year属性是我们的访问器属性
Object.defineProperty(obj,'year',{
// 表示访问器属性可以被读取 不可以被写入
get:function(){
return this._year
},
// 表示访问器属性可以被写入
// newYear --2001
set:function(newYear){
if(newYear!=this._year){
this._year=newYear;
this.editor++
}
}
});
// obj.year=2001;无效
console.log(obj.year,'读取访问器属性');
obj.year=2001;
console.log(obj.year,'访问器属性');
console.log(obj._year,'修改之后的私有属性');
console.log(obj.editor,'修改后的editor');
console.log(Object.getOwnPropertyDescriptors(obj));
console.log(obj);
输出结果:
2000 读取访问器属性
2001 访问器属性
2001 修改之后的私有属性
2 修改后的editor
{
_year: { value: 2001, writable: true, enumerable: true, configurable: true },
editor: { value: 2, writable: true, enumerable: true, configurable: true },
year: {
get: [Function: get],
set: [Function: set],
enumerable: false,
configurable: false
}
}
{ _year: 2001, editor: 2 }