是否可以获得"setter"的setter函数的引用?

tru*_*ktr 7 javascript getter-setter

例如,在此代码中

var o = {
  set a(value) {this.b = value},
  get a() {return this.b}
}
Run Code Online (Sandbox Code Playgroud)

是否有可能获得对该setter函数o.a的引用,以便如果引用被赋值,f那么我可以f.call(other, value)在另一个对象上使用它?

bhs*_*cer 13

给出您的示例对象:

var o = {
    set a(value) {this.b = value},
    get a() {return this.b}
}
Run Code Online (Sandbox Code Playgroud)

您可以像这样使用Object.getOwnPropertyDescriptor:

var setter = Object.getOwnPropertyDescriptor(o, "a").set;
var getter = Object.getOwnPropertyDescriptor(o, "a").get;

var other = {};
setter.call(other, 123);
Run Code Online (Sandbox Code Playgroud)

最后一个语句将在对象"other"上设置值123.它不会影响对象"o"的值.

您还可以使用getter从其他人那里获取值.

var result = getter.call(other);
Run Code Online (Sandbox Code Playgroud)