this指向

    var name = 'outer';
    var obj = {
        name:'inner',
        getName:function () {
            return this.name;
        },
    };

(obj.getName = obj.getName)(); 这里为什么返回‘outer’?

阅读 2.9k
6 个回答

obj.getName = obj.getName 是一个赋值表达式,返回值本身,这个值是 getName 这个函数,所以后面是直接对函数进行调用,而不是把它作为方法进行调用(obj.xxxx 的形式是方法调用)。

欢迎阅读:JavaScript 的 this 指向问题深度解析,不过这篇博文里没有提到你这里提出来的具体问题。

代码彻底展开

//赋值语句也会返回值的。。你调用的是那个返回值,不是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 绑定的理解

给你一张图片,希望对你有帮助
clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题