一般而言,在Javascript中,this指向函数执行时的当前对象
var obj={name:”Sun”}
console.log(obj.name) //–>Sun
this关键字在Javascript中和执行环境,而非声明环境有关
var name=”gname”
var nameTemp={
showName:function(){alert(this.name)} //声明公用模板对象,功能是输出名称,可供其他对象引用,此处理解为 谁引用了函数showName,this就指向谁;
}
var obj={name:”Tom”,
showName:nameTemp.showName} // 此处obj属性showName引用模板函数showName;则模板函数数据将会被覆盖,可使用构造函数方式解决这个问题;
obj.showName(); //–>Tom,执行环境对象为obj,所要this指向obj
-
–
- 【全局对象】
- 浏览器状况下的是 window,
- 其他情况下如node.js的全局对象就叫全局对象the global object
- –
环 境 | this指向 | 说明 |
---|---|---|
没有明确当前对象时 | 全局对象window | 默认当作是window方法运行 |
局部变量引用的函数 | 全局对象window | 无法解释 |
setTimeout和setInterval | 全局对象window | 他们是window方法,自然指向window |
运行匿名函数时 | 全局对象window |
例如
var name=”win”;
var obj1={
name:”Bob”,
showName:function(){alert(this.name)}
};var obj2={
name:”Tom”,
showName:function(){
var fun=obj1.showName;//将obj1的方法showName的指针复制给fun,此时得到一个fun()方法
fun();
}}var show=obj1.showName;
show(); //–>win,可以当作是window调用方法show(),所以this指向的是window对象
obj2.showName(); //–>win, this原本应该指向对象obj2,但是局部变量showName 再引用 此变量内的局部函数fun(),this却任然指向window对象
-
: 总结:**直接调用方法**,this指向window对象
- 局部变量引用的函数,this指向window对象
正确的设计方式:内部函数的 this 应该绑定到其外层函数对应的对象上