JavaScript podwójny dwukropek (operator wiązania)

132

Jak wiesz, jest propozycja skrótu do .bind()funkcji, więc możesz napisać:

::this.handleStuff

i tak będzie działać w es5:

this.handleStuff.bind(this)

Moje pytanie brzmi: czy będzie można w ten sposób przekazywać argumenty?

Mam na myśli sposób pisania tego za pomocą wspomnianego wcześniej skrótu:

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

To dość powszechny wzorzec w Reakcie, więc dobrze byłoby go trochę skrócić.

Victor Marchuk
źródło
1
Mówisz o częściowej aplikacji?
Ben Aston
Wydaje się, że to dobry pomysł na kolejną propozycję specyfikacji.
Greg Herbowicz

Odpowiedzi:

156

Nie. Operator wiązania ( propozycja specyfikacji ) występuje w dwóch wersjach:

  • Ekstrakcja metod

    ::obj.method     ≡ obj.method.bind(obj)
    
  • wywołania „metody wirtualnej”

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

Żaden z nich nie ma częściowego zastosowania . Do tego, co chcesz, powinieneś użyć funkcji strzałki:

(...args) => this.handleStuff('stuff', ...args) ≡ this.handleStuff.bind(this, 'stuff')
Bergi
źródło
4
(Odbyła się dyskusja na temat wsparcia częściowego wniosku)
Bergi