ES6 class setter 作为函数

ES6 class setter as a function

我正在尝试提交 class 的 setter 函数作为参数。

假设有:

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

但是,如果我像这样调用 function f(setter) { setter(); } f(obj.foo),当然会调用 getter.[=18 提交 obj.foo 的值=]

我正在考虑使用箭头函数 (foo) => obj.foo = foo,它确实有效。但是必须有一个更短的方法,比如 f(obj.setFoo) 来获得 setter 函数。

欢迎提出想法。

But there must be a shorter way, something like f(obj.setFoo) to get the setter function.

没有。还有更长的路,

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

访问函数存储在 internal property attributes 中,不使用反射无法访问。坚持使用箭头函数解决方案或在 class.

上定义 getter/setter 函数(而不是访问器 属性)

您始终可以定义 getter 其中 returns setter:

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