通过definerProperty定义新的getter / setter属性创建无用的变量

时间:2018-03-27 15:19:51

标签: javascript

var a = {}
Object.defineProperty(a, 'm', {
    get () {
        return this._m
    },
    set (val) {
        this._m = val
        console.log('val', val)
    }
}) . 

当我想通过defineProperty定义新属性时遇到了一些问题,因为同时创建了一些无用的变量,这里是'_m'属性。

2 个答案:

答案 0 :(得分:0)

您可以将值存储在闭包中:

(function () {
    let m;

    Object.defineProperty(a, 'm', {
        get () {
            return m;
        },
        set (val) {
            m = val;
            console.log('val', val);
        }
    });
})();

请注意,我认为这会使代码变得不必要地复杂且难以调试,因此它并不值得。

答案 1 :(得分:0)

嗯,你创造了它,对吗?您可以创建一个闭包,而不是将值存储在对象上:



var a = {}
Object.defineProperty(a, 'm', (() => {
    let value;
    return {
      enumerable: true, // Make "m" itself enumerable.
      get () {
          return value;
      },
      set (val) {
          value = val
          console.log('val', val)
      }
    };
})());

a.m = 12;

console.log(a);