問題:
在JavaScript 中,我們如何有效地刪除事件監聽器使用bind()方法新增?
簡介:
bind()方法允許你建立一個具有指定上下文的新函數,將this關鍵字綁定到一個特定的物體。這通常用於確保事件偵聽器呼叫的方法可以存取正確的上下文。
例如:
考慮以下場景:
(function () { // MyClass constructor MyClass = function () { this.myButton = document.getElementById("myButtonID"); this.myButton.addEventListener( "click", this.clickListener.bind(this) ); }; MyClass.prototype.clickListener = function (event) { console.log(this); // Should be MyClass }; // Method to disable the button MyClass.prototype.disableButton = function () { // Remove the event listener this.myButton.removeEventListener( "click", this.clickListener_________// Placeholder for missing argument ); }; })();
討論:
討論:一個可能的解決方案是追蹤使用bind()添加的每個監聽器,但這種方法很麻煩且容易出錯。
最佳解決方案:const clickListenerBound = this.clickListener.bind(this); this.myButton.addEventListener("click", clickListenerBound);更有效的解決方案是認識到bind()方法創建了一個新的函數引用。因此,要刪除監聽器,我們需要將引用指派給變數:
this.myButton.removeEventListener("click", clickListenerBound);然後,停用按鈕時:
以上是如何刪除JavaScript中透過bind()方法新增的事件監聽器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!