一般而言,在Javascript中,this指向函数执行时的当前对象。值得注意,该关键字在Javascript中和执行环境,而非声明环境有关。当没有明确的执行时的当前对象时,this指向全局对象window。
先看一下以下代码alert出来是什么
var name = "Bob";
var person ={
name : "Tom",
showName : function(){
alert(this.name);
},
waitShowName : function(){
setTimeout(this.showName, 1000);
}
};
person.waitShowName();//Bob
出现的是Bob,因为setTimeout()执行对象是window对象,所以window下面的name就是”Bob”了!
再看一个例子
var someone = {
name: "Bob",
showName: function(){
alert(this.name);
}
};
var other = {
name: "Tom",
showName: someone.showName
}
other.showName();//Tom
this关键字虽然是在someone.showName中声明的,但运行的时候是other.showName,所以this指向other.showName函数的当前对象,即other,故最后alert出来的是other.name!
var name = "Tom";
var Bob = {
name: "Bob",
show: function(){
alert(this.name);
}
}
var show = Bob.show;
show(); //Tom
你可能也能理解成show是window对象下的方法,所以执行时的当前对象时window。但局部变量引用的函数上,却无法这么解释:
var name = "window";
var Bob = {
name: "Bob",
showName: function(){
alert(this.name);
}
}
var Tom = {
name: "Tom",
showName: function(){
var fun = Bob.showName;
fun();
}
}
Tom.showName();//window
看一个高级一点的
var name = "Bob";
var nameObj ={
name : "Tom",
showName : function(){
alert(this.name);
},
waitShowName : function(){
var that = this;
setTimeout(function(){
that.showName();
}, 1000);
}
};
nameObj.waitShowName(); //Tom
现在应该对this关键字有大概的认识了吧