儲存它以用於巢狀函式物件
一個常見的缺陷是嘗試在巢狀函式或物件中使用 this
,其中上下文已丟失。
document.getElementById('myAJAXButton').onclick = function(){
makeAJAXRequest(function(result){
if (result) { // success
this.className = 'success';
}
})
}
這裡的上下文(this
)在內部回撥函式中丟失了。要更正此問題,你可以將 this
的值儲存在變數中:
document.getElementById('myAJAXButton').onclick = function(){
var self = this;
makeAJAXRequest(function(result){
if (result) { // success
self.className = 'success';
}
})
}
Version >= 6
ES6 引入了箭頭函式 ,包括詞法 this
繫結。上面的例子可以這樣寫:
document.getElementById('myAJAXButton').onclick = function(){
makeAJAXRequest(result => {
if (result) { // success
this.className = 'success';
}
})
}