为了账号安全,请及时绑定邮箱和手机立即绑定

为什么this指向死window而不是object

var name = "The Window";
var object = {
    name : "My Object",
    getNameFunc : function(){
        return function(){
            return this.name;
        };
    }
};
console.log(object.getNameFunc());
//输出 this Window


正在回答

3 回答

闭包,内部函数不能访问外部函数的this与argum,如果想要访问到,需要在外部函数保存this,使内部函数可以调用到。

var name = "The Window";
var object = {
    name : "My Object",
    getNameFunc : function(){
        let that = this
        return function(){
            return that.name;
        };
    }
};
console.log(object.getNameFunc());
//输出 My ObjectMy


0 回复 有任何疑惑可以回复我~
var name = "The Window";
var object = {
    name : "My Object",
    getNameFunc : function(){
        return function(){
            return this.name;
        };
    }
};
console.log(object.getNameFunc());

楼主你漏了一个括号,应该是object.getNameFunc()().可以等同于一个函数表达式,即

var fun = object.getNameFunc();这里返回一个函数声明:

function(){         

            return this.name;           

        } 

fun();最后再调用fun();返回this.name

当函数并非作为一个对象的属性而是被调用时,this被绑定到全局变量,即指向window。所以这里返回的this.name 不是对象中的name,而是window中的全局变量name,即The window。

2 回复 有任何疑惑可以回复我~

<script type="text/javascript">

    var name = "The Window"; 

    var object = {     

        name : "My Object",     

        getNameFunc : function(){         

            return this.name;           

        } 

    }; 

    document.write(object.getNameFunc()); 

不是很懂?

0 回复 有任何疑惑可以回复我~
#1

一如忘词

/* * * 函数中的this的指向 * * * 普通函数中的this是谁?-----window * 对象.方法中的this是谁?----当前的实例对象 * 定时器方法中的this是谁?----window * 构造函数中的this是谁?-----实例对象 * 原型对象方法中的this是谁?---实例对象 * * * */
2019-08-28 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么this指向死window而不是object

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信