В JavaScript, каков наилучший способ удалить функцию, добавленную в качестве прослушивателя событий, с помощью bind ()?
пример
(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", ___________);
};
})();
Единственный способ, о котором я могу думать, - это отслеживать каждого слушателя, добавленного с помощью bind.
Пример выше с этим методом:
(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);
};
})();
Есть ли лучшие способы сделать это?
bindAll
функцию, которая упрощает методы привязки. Внутри вашего инициализатора объекта вы просто _.bindAll(this)
устанавливаете для каждого метода в вашем объекте привязанную версию. С другой стороны , если вы только хотите , чтобы связать некоторые методы (которые я рекомендовал бы, чтобы предотвратить случайные утечки памяти), вы можете предоставить их в качестве аргументов: _.bindAll(this, "foo", "bar") // this.baz won't be bound
.
this.clickListener = this.clickListener.bind(this);
иthis.myButton.addEventListener("click", this.clickListener);