从 ES5 开始,JavaScript 中每个属性都有相应的属性描述符。属性描述符有多个,可以分为数据描述符与访问描述符两类。数据描述符指的控制属性可访问性等特性,访问描述符可以覆盖属性默认的赋值与取值操作。有两种方法可以声明访问描述符:
1. 直接在对象中改变
let obj = {
set a(value) {
this._a = value + 1;
},//更改赋值操作
get a() {
return this._a;
} //更改取值操作
}
obj.a = 3;
console.log(obj.a);//9
当对 a 属性赋值时会执行 set 函数,在函数内为对象添加一个 _a 属性并赋值。
当对 a 属性取值是会执行 get 函数,取得的值与 this._a 相同。
2.使用 defineProperty
let obj = {}
Object.defineProperty(
obj,
"a",
{
get:function() {
return 2;
}
}
)
console.log(obj.a);//2
当对 a 进行取值操作时,返回 2。