首頁 > web前端 > js教程 > 主體

為什麼「this」在 JavaScript 事件處理程序中表現異常?

Susan Sarandon
發布: 2024-10-28 02:44:02
原創
1021 人瀏覽過

 Why Does

事件處理程序中不明確的「this」

使用 JavaScript 時,通常使用 addEventListener 方法建立事件處理程序。然而,當嘗試存取這些處理程序中的對象屬性時,會出現一種奇怪的行為:「this」並沒有引用對象,而是引用觸發事件的元素。

問題場景

考慮下面的程式碼,它示範了這個問題:

function ticketTable(ticks) {
  this.tickets = ticks;
}

ticketTable.prototype.render = function(element) {
  // Render table...
  cell1.addEventListener("click", this.handleCellClick, false);
};

ticketTable.prototype.handleCellClick = function() {
  // "this" refers to the clicked cell element, not the ticketTable object
  // ...
};
登入後複製

在handleCellClick器函數中,存取this.ticketsets失敗,因為「this」引用了點擊的儲存格,而不是ticketTable實例。

解:使用Bind

要解決這個問題,我們可以使用bind 方法,它允許我們為給定函數明確定義「this」的值.

function ticketTable(ticks) {
  this.tickets = ticks;
}

ticketTable.prototype.render = function(element) {
  // Render table...
  cell1.addEventListener("click", this.handleCellClick.bind(this), false);
};
登入後複製

透過使用bind(this),我們可以確保稍後調用handleCellClick函數時,「this」將正確引用ticketTable對象,從而使我們能夠訪問其屬性,例如this.tickets .

替代解決方案

除了綁定之外,替代方法還包括使用明確定義為使用“this”(而不是onclick 屬性)的事件處理函數或創建特殊的handleEvent處理所有事件的函數。

以上是為什麼「this」在 JavaScript 事件處理程序中表現異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板