var name = "the window"; var obj = { name: 'fun', //this在每个function中都是独立的个体 nameFunc : function(){//这个function是obj的方法,在这个function中的this指向obj对象 return function(){//这个function不是obj的方法,在这个function中的this指向window对象 return this.name; }; } }; alert(obj.nameFunc()());
是匿名函数的话,第一段代码相当于以下这样吗? var name = "the window"; var obj = { name: 'fun', nameFunc : function(){ return A; } }; function A(){ return this.name; }; alert(obj.nameFunc()());
function(){
return this.name;
};
obj.nameFunc()()则是调用了上面那个匿名函数,由于现在的执行环境是位于最外围的,所以上面那个匿名函数中的this被绑定为window,this.name 就是 window.name 也就是你在最外面定义的那个name变量。
而针对第二种情况,obj.nameFunc()同样是调用了obj对象的nameFunc函数。但该函数是obj的成员函数,它在被调用时其内部的this被绑定为obj对象。进而that变量指向的也就是obj对象了,再后面执行obj.nameFunc()() 时,返回的this.name 就是obj.name
var name = "the window";
var obj = {
name: 'fun',
//this在每个function中都是独立的个体
nameFunc : function(){//这个function是obj的方法,在这个function中的this指向obj对象
return function(){//这个function不是obj的方法,在这个function中的this指向window对象
return this.name;
};
}
}; alert(obj.nameFunc()());
是匿名函数的话,第一段代码相当于以下这样吗?
var name = "the window";
var obj = {
name: 'fun',
nameFunc : function(){
return A;
}
}; function A(){
return this.name;
}; alert(obj.nameFunc()());
<a href="http://www.zhangyunling.com/?p=140" target="_blank">浅析赋值表达式</a>
<a href="http://www.zhangyunling.com/?p=251" target="_blank">函数中this的指向-简单认识</a>
<a href="http://www.zhangyunling.com/?p=293" target="_blank">构造函数模式的一点新的认识</a>有兴趣,看下前两篇看看呗。
是匿名函数的话,第一段代码相当于以下这样吗?
var name = "the window";
var obj = {
name: 'fun',
nameFunc : function(){
return A;
}
}; function A(){
return this.name;
}; alert(obj.nameFunc()());
可以这么理解。因为函数A是被返回后调用的,在它内部的this其实就是它被调用的环境(即window)。