javascript - 闭包中this指向问题

查看:83
本文介绍了javascript - 闭包中this指向问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

以下是简单的代码:

var name = " Window";
var o = {

name : "Object",
getName : function(){
    return function(){
        return this.name;
    };
}

};
var a = o.getName;
a()();
var c = o.getName()();
var o1 = {

name : "My Object",
getName : function(){
    var that = this;
    return function(){
        return that.name;
    };
}

};
var d = o1.getName()();
var e = o1.getName;
e()();

请问1 :var c = o.getName()()中在运行o.getName()时,this的指向还是o,为什么o.getName()()时,this的指向就成了window?
请问2 :var a = o.getName;a()();这种方式和o.getName()()有什么区别?

解决方案

当一个函数作为方法调用时,其this指针指向调用它的对象,否则this为undefined(strict mode)或window(浏览器),global(node)

o.getName()()中,getName作为o的方法调用,其this指针就指向了o,所以o.getName()执行时this指向o。
然后o.getName()返回一个函数,o.getName()()就等价于(o.getName())(),可以看到新的函数没有作为任何一个对象的方法调用,只是孤立的作为函数调用,其this指针就指向window。

如果像var a = o.getName; a()();这样将getName提取出来再调用,赋值给a的只是getName的函数本身,并不包括调用它的环境。a()运行时a只是一个函数,并没有作为任何对象的方法,其this指针就已经指向window了。

这篇关于javascript - 闭包中this指向问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆