首頁 >web前端 >js教程 >為什麼在 JavaScript 中使用「var self = this」?

為什麼在 JavaScript 中使用「var self = this」?

Susan Sarandon
Susan Sarandon原創
2024-11-27 02:11:10704瀏覽

Why Use

JavaScript 習慣用法:理解「var self = this」

「var self = Javathis;」這種習慣用法在Javathis;」很常見,尤其是在事件處理程序中。它允許您在巢狀函數或事件處理程序閉包內維護對原始“this”物件的參考。

當您在建構函式或物件內定義函數時,執行上下文會發生變化,並且「this」引用到非嚴格模式下的全域物件(視窗)。在嚴格模式下,「this」將是未定義的。為了避免這種情況,開發人員使用「var self = this」來保留對原始物件的參考。

為什麼要用「var self = this」?

考慮以下來自 WebKit 的 HTML5 SQL Storage Notes 演示的範例:

function Note() {
  var self = this;

  var note = document.createElement('div');
  note.className = 'note';
  note.addEventListener('mousedown', function(e) { return self.onMouseDown(e) }, false);
  note.addEventListener('click', function() { return self.onNoteClick() }, false);
  this.note = note;
  // ...
}

在此程式碼中,「self」被指派給「this」建構子。這確保了當調用事件處理程序時(例如單擊“note”div),“this”仍將引用原始 Note 對象,從而允許正確調用“onMouseDown”等方法。

「var self = this」常見嗎?

是的,這個習慣用法在 JavaScript 應用程式中廣泛使用,特別是在處理閉包時和事件處理程序。它允許開發人員在巢狀函數中維護對原始上下文的參考。

替代方法

雖然「var self = this」很有效,但它可能會令人困惑讀。另一種方法是使用箭頭函數(ES6 中引入),它保留周圍上下文的「this」綁定。

例如:

function Note() {
  var note = document.createElement('div');
  note.className = 'note';
  note.addEventListener('mousedown', (e) => { this.onMouseDown(e) });
  note.addEventListener('click', () => { this.onNoteClick() });
  this.note = note;
  // ...
}

注意:

現在不鼓勵使用“var self = this”,因為它可能由於存在而導致錯誤「窗口.self」。建議使用箭頭函數或其他替代方法來維護“this”綁定。

以上是為什麼在 JavaScript 中使用「var self = this」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn