在事件監聽器中處理「this」引用
在物件導向程式設計中,「this」關鍵字指的是方法正在被調用。但是,當使用 addEventListener 處理動態渲染元素上的事件時,「this」參考可能會出現問題。
問題
如提供的程式碼中所述,當使用addEventListener 將事件偵聽器附加到單元格,處理程序函數中的「this」引用指的是單擊的元素而不是創建表的物件實例。這使得從事件處理程序中存取物件屬性和方法變得困難。
解決方案:Bind 或handleEvent
此問題的一種解決方案是使用bind,它允許您為對特定函數的所有呼叫指定用作「this ”的值。透過將事件處理函數綁定到物件實例,可以確保處理函數中的「this」參考保持一致。
使用綁定的範例:
<code class="javascript">cell1.addEventListener("click", this.handleCellClick.bind(this), false);</code>
另一種方法是實作handleEvent函數,該函數旨在擷取和處理物件內的任何事件。透過重寫handleEvent方法,您可以指定物件上所有事件類型的行為。
使用handleEvent的範例:
<code class="javascript">ticketTable.prototype.handleEvent = function(event) { if (event.type === "click") { console.log(this.tickets.length); // Accesses the array property } }; cell1.addEventListener("click", this, false);</code>
刪除事件監聽器
需要注意的是,使用綁定時,正確刪除事件偵錯聽器可能具有挑戰性。相反,請考慮使用handleEvent方法或支援事件偵聽器清理的第三方程式庫。
總之,使用bind或實作handleEvent可讓您控制事件處理程序中的「this」引用,讓您能夠正確地存取物件的屬性和方法。正確的事件偵聽器清理對於保持記憶體效率也至關重要。
以上是處理動態元素時如何處理事件偵聽器中的'this”引用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!