看下面这段程序
var name = "Bob";
var nameObj ={
name : "Tom",
showName : function(){
console.log(this.name);
},
waitShowName : function(){
setTimeout(this.showName, 1000);
}
};
nameObj.waitShowName();//Bob
nameObj.showName();//Tom
setTimeout函数的默认定义域是全局的,this代指调用他的那个对象,showName()函数是个调用对象为nameObj,故输出了Tom。若要让waitShowName输出Tom,你只需这样做:
var name = "Bob";
var nameObj ={
name : "Tom",
showName : function(){
console.log(this.name);
},
waitShowName : function(){
var that = this; //将this值保存。有些地方也将that写为self。
setTimeout(function(){
console.log(that.name);
}, 1000);
}
};
nameObj.waitShowName();