问答详情
源自:9-19 网页尺寸scrollHeight

为什么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


提问者:web_東 2019-08-04 19:16

个回答

  • crush2020
    2020-10-29 10:48:54

    闭包,内部函数不能访问外部函数的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


  • 慕仙9264919
    2020-04-12 15:53:33

    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。

  • weixin_慕运维8217716
    2019-08-14 17:04:18

    <script type="text/javascript">

        var name = "The Window"; 

        var object = {     

            name : "My Object",     

            getNameFunc : function(){         

                return this.name;           

            } 

        }; 

        document.write(object.getNameFunc()); 

    不是很懂?