首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

等高手解答网下的一道关于闭包的代码

2013-01-20 
等高手解答网上的一道关于闭包的代码var name The Windowvar object {name: My Object,getNameFu

等高手解答网上的一道关于闭包的代码
        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;
                };
            }
        };


        alert(object.getNameFunc()()); //My Object

热点排行
Bad Request.