У 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", ___________);
};
})();
Єдиний спосіб, про який я можу придумати, - це відслідковувати кожного слухача, доданого з прив’язкою.
Наведений вище приклад із цим методом:
(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);