2016-07-14 13 views
1

Ich versuche, die Setter-Funktion einer Klasse als Parameter übergeben.ES6 Klasse Setter als Funktion

Lassen Sie sich asume gibt es:

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

Allerdings, wenn ich die function f(setter) { setter(); } wie diese f(obj.foo) Aufruf natürlich den Wert obj.foo wird der Aufruf des Getter vorgelegt werden.

Ich dachte über die Verwendung einer Pfeilfunktion nach und es funktioniert. Aber es muss einen kürzeren Weg geben, etwa f(obj.setFoo), um die Setter-Funktion zu bekommen.

Ideen sind willkommen.

+0

Was ist 'Funktion f (obj, Setter, value) {obj [Setter] = Wert; } ' –

Antwort

1

Aber es muss einen kürzeren Weg geben, etwas wie f (obj.setFoo), um die Setter-Funktion zu bekommen.

Nein. Es gibt einen längeren Weg,

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

Accessor-Funktionen werden in der internal property attributes gespeichert und sind nicht zugänglich, ohne Reflexion verwendet wird. Bleiben Sie bei Ihrer Pfeilfunktionslösung oder definieren Sie Getter/Setter-Funktionen (anstelle einer Accessor-Eigenschaft) für die Klasse.

1

Sie können immer einen Getter definieren, die die Setter zurückgibt:

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