var name = 'outer';
var obj = {
name:'inner',
getName:function () {
return this.name;
},
};
(obj.getName = obj.getName)();
这里为什么返回‘outer’?
var name = 'outer';
var obj = {
name:'inner',
getName:function () {
return this.name;
},
};
(obj.getName = obj.getName)();
这里为什么返回‘outer’?
代码彻底展开
//赋值语句也会返回值的。。你调用的是那个返回值,不是obj.getName
temp=obj.getName=obj.getName;
temp();
这样调用就是作为函数调用,所以this指向全局
(obj.getName = obj.getName)();
其实就相当于 a = obj.getName; a()
;只不过 a相当于(obj.getName)了
这种 this 绑定,属于隐式丢失
第一个 obj.getName 是第二个 obj.getName 的一个引用,但实际上,它引用的是 第二个 obj.getName 函数本身 , 因此 在调用的(obj.getName = obj.getName)()
,实质上是调用的是
(function () {
return this.name;
})()
这是我对 this 绑定的理解
10 回答11.2k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
obj.getName = obj.getName
是一个赋值表达式,返回值本身,这个值是getName
这个函数,所以后面是直接对函数进行调用,而不是把它作为方法进行调用(obj.xxxx 的形式是方法调用)。欢迎阅读:JavaScript 的 this 指向问题深度解析,不过这篇博文里没有提到你这里提出来的具体问题。