通过DefileProperty创建无用的变量来定义新的Getter/Setter属性


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

当我想通过DefineProperty定义新属性时,我遇到了一些问题,因为在此创建了一些无用的变量,此处是" _M"属性。

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

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

请注意,我认为这使得代码既需要不必要的复杂又难以调试,因此它并不值得。

好吧,您创建了它,对吗?您可以创建一个封闭而不是将值存储在对象上:

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);

最新更新