En JavaScript, quel est le meilleur moyen de supprimer une fonction ajoutée en tant qu'écouteur d'événements à l'aide de bind ()?
Exemple
(function(){
// constructor
MyClass = function() {
this.myButton = document.getElementById("myButtonID");
this.myButton.addEventListener("click", this.clickListener.bind(this));
};
MyClass.prototype.clickListener = function(event) {
console.log(this); // must be MyClass
};
// public method
MyClass.prototype.disableButton = function() {
this.myButton.removeEventListener("click", ___________);
};
})();
La seule façon dont je peux penser est de garder une trace de chaque auditeur ajouté avec bind.
Exemple ci-dessus avec cette méthode:
(function(){
// constructor
MyClass = function() {
this.myButton = document.getElementById("myButtonID");
this.clickListenerBind = this.clickListener.bind(this);
this.myButton.addEventListener("click", this.clickListenerBind);
};
MyClass.prototype.clickListener = function(event) {
console.log(this); // must be MyClass
};
// public method
MyClass.prototype.disableButton = function() {
this.myButton.removeEventListener("click", this.clickListenerBind);
};
})();
Existe-t-il de meilleures façons de procéder?
bindAll
fonction qui simplifie les méthodes de liaison. Dans votre initialiseur d'objet, il vous suffit _.bindAll(this)
de définir chaque méthode de votre objet sur une version liée. Sinon, si vous voulez seulement lier certaines méthodes (que je vous recommande, pour éviter les fuites de mémoire accidentelle), vous pouvez leur fournir comme arguments: _.bindAll(this, "foo", "bar") // this.baz won't be bound
.
this.clickListener = this.clickListener.bind(this);
etthis.myButton.addEventListener("click", this.clickListener);