保存它以用于嵌套函数对象
一个常见的缺陷是尝试在嵌套函数或对象中使用 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';
}
})
}