JavaScript double-virgule (opérateur de liaison)

129

Comme vous le savez, il existe une proposition de raccourci pour la .bind()fonction, vous pouvez donc écrire:

::this.handleStuff

et cela fonctionnera comme ça dans es5:

this.handleStuff.bind(this)

Ma question est la suivante: sera-t-il possible de passer des arguments de cette façon?

Je veux dire une façon d'écrire ceci avec le raccourci susmentionné:

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

C'est un modèle assez courant dans React, donc ce serait bien de le raccourcir un peu.

Victor Marchuk
la source
1
Parlez-vous d'une application partielle?
Ben Aston le
Cela semble être une bonne idée pour une autre proposition de spécification.
Greg Herbowicz

Réponses:

154

Non. L' opérateur de liaison ( proposition de spécification ) est disponible en deux versions:

  • Extraction de méthode

    ::obj.method      obj.method.bind(obj)
  • appels de "méthode virtuelle"

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

Aucun d'eux ne présente une application partielle . Pour ce que vous voulez, vous devez utiliser une fonction de flèche:

(...args) => this.handleStuff('stuff', ...args)  this.handleStuff.bind(this, 'stuff')
Bergi
la source
4
(Il y a eu une discussion sur la prise en charge de l'application partielle)
Bergi