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ć.


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

4
(Odbyła się dyskusja na temat wsparcia częściowego wniosku)
Bergi
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.