JavaScript-Doppelpunkt (Bindungsoperator)

129

Wie Sie wissen, gibt es einen Vorschlag für eine Verknüpfung für die .bind()Funktion, sodass Sie schreiben können:

::this.handleStuff

und so wird es in es5 funktionieren:

this.handleStuff.bind(this)

Meine Frage ist: Wird es möglich sein, Argumente auf diese Weise weiterzugeben?

Ich meine eine Art, dies mit der oben genannten Abkürzung zu schreiben:

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

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

Victor Marchuk
quelle
1
Sprechen Sie über eine Teilanwendung?
Ben Aston
Scheint eine gute Idee für einen weiteren Spezifikationsvorschlag zu sein.
Greg Herbowicz

Antworten:

154

Nein. Der Bindungsoperator ( Spezifikationsvorschlag ) gibt es in zwei Varianten:

  • Methodenextraktion

    ::obj.method      obj.method.bind(obj)
  • Aufrufe der "virtuellen Methode"

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

Keiner von ihnen verfügt über eine teilweise Anwendung . Für das, was Sie wollen, sollten Sie eine Pfeilfunktion verwenden:

(...args) => this.handleStuff('stuff', ...args)  this.handleStuff.bind(this, 'stuff')
Bergi
quelle
4
(Es gab einige Diskussionen über die Unterstützung der Teilanwendung)
Bergi