JavaScript 中的 this 關鍵字如果不理解的話可能會非常棘手。這是即使是經驗豐富的開發人員也很難輕鬆掌握的事情之一,但一旦你掌握了,它可以為你節省大量時間。
在本文中,我們將了解它是什麼、它在不同情況下如何運作以及使用它時不應陷入的常見錯誤。
this 只是指目前在 javascript 程式碼中使用的物件。但這是棘手的部分: this 所指的內容也可能會根據您在程式碼中使用它的位置和方式而改變。有人可能會問「這是為什麼呢?」嗯,這本質上是動態的 =,這意味著 - 它的值是在呼叫函數時確定的,而不是在編寫函數時確定的。
當您在全域上下文中使用 this 時,它通常指的是全域對象,這很有意義,對嗎?因此,如果您只是在瀏覽器的控制台中輸入此內容,它將指向該視窗。
雖然在函數內部使用時,它的行為卻截然不同。例如:如果您呼叫函數“myFunction”,this 仍將指向全域對象,但如果您在 Javascript 中使用嚴格模式,則會使其在該函數內未定義。
是的,我知道這很令人困惑,請繼續。我會更好地解釋。
當您在方法(作為物件屬性的函數)內使用 this 時,this 指的是該方法所屬的物件。
例子:
const myObject = { name: 'Alice', greet: function() { console.log(this.name); } }; myObject.greet(); // Output: 'Alice'
這裡,this.name指的是myObject.name,即'Alice'。
建構子:當您使用建構子或類別建立物件時,this 指的是正在建立的新物件。
例子:
function Person(name) { this.name = name; } const person1 = new Person('Bob'); console.log(person1.name); // Output: 'Bob'在
程式碼中,this.name指的是新的Person物件的name屬性。
一個常見的錯誤是在回呼或事件處理程序中失去其正確的值。例如,如果您將物件的方法作為回調傳遞,則 this 可能不再引用該物件。
解決方案:為了避免這種情況,可以使用箭頭函數或bind來保持this指向正確的物件。
const myObject = { name: 'Eve', greet: function() { setTimeout(() => { console.log(this.name); }, 1000); } }; myObject.greet(); // Output: 'Eve'
this 關鍵字可能很麻煩,但您需要注意的是,它會根據您選擇調用它的方式和位置而變化。為了更好地掌握它,用它來練習大量的例子,你很快就會成為它的專家。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3