JavaScript 改变对象属性赋值与取值操作的两种姿势

从 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。

你可能感兴趣的:(JavaScript 改变对象属性赋值与取值操作的两种姿势)