您的位置:首页 > Web前端 > JavaScript

JS的this关键字

2017-01-18 15:48 134 查看
一般而言,在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


看一个高级一点
4000


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关键字有大概的认识了吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: