从 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.
来源: http://www.jianshu.com/p/309c17fb5c78