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.