JavaScript doppio punto (operatore di bind)


129

Come sai, esiste una proposta per un collegamento per la .bind()funzione, quindi puoi scrivere:

::this.handleStuff

e funzionerà così in es5:

this.handleStuff.bind(this)

La mia domanda è: sarà possibile passare argomenti in questo modo?

Intendo un modo di scrivere questo con la scorciatoia di cui sopra:

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

È un modello abbastanza comune in React, quindi sarebbe bello accorciarlo un po '.


1
Stai parlando di un'applicazione parziale?
Ben Aston,

Sembra una buona idea per l'ennesima proposta di specifica.
Greg Herbowicz,

Risposte:


154

No. L' operatore di bind ( proposta di specifica ) è disponibile in due versioni:

  • Estrazione del metodo

    ::obj.method      obj.method.bind(obj)
  • chiamate "metodo virtuale"

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

Nessuno dei due presenta un'applicazione parziale . Per quello che vuoi, dovresti usare una funzione freccia:

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

4
(C'è stata qualche discussione sul supporto dell'applicazione parziale)
Bergi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.