2015-07-04 16 views
110

Wie Sie wissen, gibt es einen Vorschlag für eine Verknüpfung für .bind() Funktion, so können Sie schreiben:JavaScript doppelte Doppelpunkt (bind Operator)

::this.handleStuff 

und es wird wie in ES5 arbeiten:

this.handleStuff.bind(this) 

Meine Frage ist: wird es möglich sein, Argumente auf diese Weise zu übergeben?

meine ich eine Möglichkeit, dies mit der oben genannten Verknüpfung des Schreibens:

this.handleStuff.bind(this, 'stuff') 

Es ist ein ziemlich häufiges Muster in Reaktion, so wäre es schön, es ein wenig zu verkürzen.

+1

Sprechen Sie über die teilweise Anwendung? – Ben

+0

Scheint wie eine gute Idee für noch einen Spec-Vorschlag. –

Antwort

130

No. Die bind operator (spec proposal) kommt in zwei Varianten:

  • Method Extraktions

    ::obj.method  ≡ obj.method.bind(obj) 
    
  • "virtuelle Methode" aufruft

    obj::function ≡ function.bind(obj) 
    obj::function(…) ≡ function.call(obj, …) 
    

Keiner von ihnen verfügt über partial application. Für was Sie wollen, sollten Sie eine Pfeil-Funktion verwenden:

(...args) => this.handleStuff('stuff', ...args) ≡ this.handleStuff.bind(this, 'stuff') 
+4

(Es gab [einige Diskussion] (https://github.com/tc39/proposal-bind-operator/issues/37) über die Unterstützung von Teilapplikationen) – Bergi

Verwandte Themen