在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);
};
})();
有沒有更好的辦法來做到這一點?
除了'this.clickListener = this.clickListener.bind你在做什麼(本);'和'this.myButton.addEventListener( 「點擊」,這.clickListener);' – Esailija 2012-07-19 16:46:48
這非常好。這可能是一個不同的主題,但它使我想知道我是否應該做的我的方法,其使用「這個」關鍵詞其餘綁定(本),即使它會調用方法低效。 – takfuruya 2012-07-19 17:23:32
我總是這樣做,因爲在構造函數中,第一件事就是所有方法是將要經過的地方,無論是否稍後我會刪除它們。但不是所有的方法,只是那些傳遞的方法。 – Esailija 2012-07-19 17:25:40