web-dev-qa-db-fra.com

JavaScript double colon (opérateur de liaison)

Comme vous le savez, il existe une proposition de raccourci pour la fonction .bind(), afin que vous puissiez é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 commun dans React, il serait donc agréable de le raccourcir un peu.

125
Victor Marchuk

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

  • Méthode d'extraction

    ::obj.method     ≡ obj.method.bind(obj)
    
  • appels "méthodes virtuelles"

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

Aucune d'entre elles ne comporte application partielle . Pour ce que vous voulez, vous devriez utiliser une fonction de flèche:

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