日期:2014-05-16  浏览次数:20313 次

等高手解答网上的一道关于闭包的代码
        var name = "The Window";
        var object = {
            name: "My Object",
            getNameFunc: function () {
                return function () {
                    return this.name;
                };
            }
        };
        alert(object.getNameFunc()()); //The Window

还是不明白为什么会返回 "The Window",
object.getNameFunc()返回的是最内层的函数,而内存函数也是指向object对象,所以this应该是“My Object”,不知道问题出在哪里。

------解决方案--------------------
 var name = "The Window";
        var object = {
            name: "My Object",
            getNameFunc: function () {
                var that = this
                return function () {
                    return that.name;
                };
            }
        };
        alert(object.getNameFunc()()); //The Window
------解决方案--------------------
分析每个执行环节

object.getNameFunc() 则  这个时候  getNameFunc中的this 是object

但是 

var a = object.getNameFunc();
a();
这个时候a运行时候 没有关联对象 默认this === window


------解决方案--------------------
因为object.getNameFunc()为   return function () {return this.name; };
这时候的this指的是window而不是 object 。
要想是My Object可以这样:

   var name = "The Window";
        var object = {
            name: "My Object",
            getNameFunc: function () {
 var that = this
                return function () {
                    return that.name;
                };
            }
  &n