: javascript

Binding

Le binding est une technique permettant d'associer une instance d'un objet à une fonction par le biais d'une closure.

L'idée consiste à étendre le prototype de l'objet Function directement et de lui offire une méthode facilitant la liaison.

Function.prototype.bind = function(context) {
  var m = this; // référence l'instance de Function
  return function() {
    return m.apply(context, arguments);
  }
}

Maintenant chaque fonction dispose d'une nouvelle méthode bind. Dans l'exemple de la page précédente on avait utilisé apply pour faire l'appel. Dés maintenant il est plus simple d'écrire ceci:

function Compteur(element) {
  this.counter =  10; // variable pour compter
  addEvent(element, 'click', this.count.bind(this));
}

addEvent ne reçoit plus une référence direct à this.count mais reçoit une référence à la fonction interne anonyme. Lorsque l'évènement se produit, c'est ce code qui sera d'abord exécuté:

 return m.apply(instance, arguments);

Ce code invoque la méthode apply de l'instance m. m est connu de la fonction grâce à la closure. m correspond à l'instance de la fonction this.count dans ce cas. C'est donc this.count qui sera appelé.

Le premier paramètre de apply est l'instance souhaitée en tant que contexte. C'est le premier paramètre passé à bind. En l'occurrence c'est this lors de l'appel à addEvent. Dans ce contexte this référencie l'instance de Compteur.

Editer