【问题标题】:ES6 class setter as a functionES6 类设置器作为函数
【发布时间】:2016-07-14 10:28:12
【问题描述】:

我正在尝试提交一个类的setter函数作为参数。

假设有:

class A { 
    set foo(foo) {
        this._foo = foo
    } 
}

但是,如果我像这样f(obj.foo) 调用function f(setter) { setter(); },当然obj.foo 的值将通过调用getter 提交。

我正在考虑使用箭头函数(foo) => obj.foo = foo,它可以工作。但是必须有更短的方法,比如f(obj.setFoo) 来获取setter 函数。

欢迎提出想法。

【问题讨论】:

  • function f(obj, setter, value){ obj[setter] = value; }怎么样

标签: javascript ecmascript-6 setter


【解决方案1】:

但必须有更短的方法,例如 f(obj.setFoo) 来获取 setter 函数。

不。还有更远的路,

var setFoo = Object.getOwnPropertyDescriptor(obj, 'foo').set;
setFoo.call(obj, 'bar');

访问器函数存储在internal property attributes 中,不使用反射就无法访问。坚持使用箭头函数解决方案或在类上定义 getter/setter 函数(而不是访问器属性)。

【讨论】:

    【解决方案2】:

    你总是可以定义一个返回 setter 的 getter:

    class A {
      get foo() {
        return Object.getOwnPropertyDescriptor(A.prototype, 'foo').set;
      }
      set foo(foo) {
        this._foo = foo;
      }
    }
    var obj = new A();
    (function(setter) {
      setter.call(obj, 123);
      console.log(obj._foo); // 123
    })(obj.foo);

    【讨论】:

      猜你喜欢
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      相关资源
      最近更新 更多