Was ist in JavaScript der beste Weg, um eine als Ereignis-Listener hinzugefügte Funktion mit bind () zu entfernen?
Beispiel
(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", ___________);
};
})();
Der einzige Weg, den ich mir vorstellen kann, besteht darin, jeden mit bind hinzugefügten Listener im Auge zu behalten.
Oberes Beispiel mit dieser Methode:
(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);
};
})();
Gibt es bessere Möglichkeiten, dies zu tun?
bindAll
Funktion, die die Bindungsmethoden vereinfacht. In Ihrem Objektinitialisierer müssen Sie lediglich _.bindAll(this)
jede Methode in Ihrem Objekt auf eine gebundene Version setzen. Wenn Sie nur einige Methoden binden möchten (was ich empfehlen würde, um versehentliche Speicherverluste zu vermeiden), können Sie sie alternativ als Argumente angeben : _.bindAll(this, "foo", "bar") // this.baz won't be bound
.
this.clickListener = this.clickListener.bind(this);
undthis.myButton.addEventListener("click", this.clickListener);