js中的this

一般而言,在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

环 境 this指向 说明
没有明确当前对象时 全局对象window 默认当作是window方法运行
局部变量引用的函数 全局对象window 无法解释
setTimeoutsetInterval 全局对象window 他们是window方法,自然指向window
运行匿名函数时 全局对象window

【全局对象】
浏览器状况下的是 window,
其他情况下如node.js的全局对象就叫全局对象the global object

例如

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 应该绑定到其外层函数对应的对象上

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页