trusktr
trusktr

Reputation: 45484

Is it possible to get a reference to the setter function of a "setter"?

For example, in this code

var o = {
  set a(value) {this.b = value},
  get a() {return this.b}
}

is it possible to get a reference to that setter function for o.a so that if the reference is assign to f then I can do f.call(other, value) to use it on another object?

Upvotes: 11

Views: 2275

Answers (2)

bhspencer
bhspencer

Reputation: 13570

Given your example object:

var o = {
    set a(value) {this.b = value},
    get a() {return this.b}
}

You can use Object.getOwnPropertyDescriptor like this:

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

var other = {};
setter.call(other, 123);

That last statement will set the value 123 on object "other". It does not affect the value on the object "o".

You can also get the value from other using the getter.

var result = getter.call(other);

Upvotes: 19

error
error

Reputation: 756

Try Object.getOwnPropertyDescriptor. It will return an object with getter and setter methods.

Upvotes: 1

Related Questions