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.


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

4
(Il y a eu une discussion sur la prise en charge de l'application partielle)
— Bergi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.