<script type="text/javascript">
    var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
      return function(){
        return this.name;
      };    }  };  alert(object.getNameFunc()());
</script>

解决方案 »

  1.   

    结果是空应为this没有引用的对象,他用了一个匿名函数,所以是空对象掉的这个方法弹出name属性
    像这道题要是让你解决怎么能弹出name值,就这样写~·window.onload = function(){
    var name = "The Window";
      var object = {
        name : "My Object",
        getNameFunc : function(){
    that = this;
          return function(){
            return that.name;
          };    }  };  alert(object.getNameFunc()()); };
    弹出的name 值为My Object
    因为咱们用了一个that = this;来引用当前对象object,所以它弹出来的是object对象的name值
      

  2.   

    这段代码
    ...
    getNameFunc : function(){ 
          return function(){ 
            return this.name; 
          };     } 
    ...如果翻译成这样:
    ...
    this.getNameFunc = function(){
        var tmp = function(){
            return this.name;
        }
        return tmp();
    }
    ...
    可以这样翻译吧 我不是很肯定 我觉得这样当取this.name的时候 this应该已经不是object对象了
      

  3.   

    楼上的朋友你好,要是这样的话,讨论这个问题就没有意义了!首先,这个题目的代码是没有错误的,而且可以运行出来,答案是"The Window",应用js闭包的知识去理解,不过我有点不太理解这个答案!不信你可以在页面中运行一下试一下!谢谢顶贴!
      

  4.   


    楼主你发的代码我用FF,IE都弹不出来你说的这个"The Window"值
    我弹出来的都是空值,我不知道你用的是什么先进的浏览器。你可以自己试试~··
      

  5.   

    你把这些代码写在
    window.onload = function(){
    };这里试试~···
      

  6.   


    <script type="text/javascript"> 
    var name = "The Window";
    var object = {
    name : "My Object",
    getNameFunc : (function(n){
    return function(){return n;}
    })(this.name)
    }; alert(object.getNameFunc());
    </script>
      

  7.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>学习JavaScript闭包</title>
    <script type="text/javascript">
    var name = "The Window";
      var object = {
        name : "My Object",
        getNameFunc : function(){
          return function(){
            return this.name;
          };    }  };
     alert(object.getNameFunc()()); </script>
    </head><body>
    </body>
    </html>
      

  8.   

    getNameFunc 返回一个函数入口,那个返回的函数不属于任何对象,this向的就是window了
      

  9.   

    这个跟作用域有关,this放在getNameFunc函数内的时候是指向当前对象的,放在getNameFunc函数内部的function内则指向全局对象(比如window),在window对象中没有name属性
      

  10.   

    闭包,事件处理函数, call,apply都有可能改变执行环境(this), 这样就可以看清楚this指谁:<script type="text/javascript"> 
        var name = "The Window";
        alert(this===window?"this===window":"this===object");
      var object = { 
        name : "My Object", 
        getNameFunc : function(){
    alert(this===window?"this===window":"this===object");
          return function(){
    alert(this===window?"this===window":"this===object"); 
            return this.name; 
          };     }   };
      alert(object.getNameFunc()());
    </script>为了避免this回乱变, 推荐的方法是用call来修正它, 看例子:<script type="text/javascript"> 
        var name = "The Window";
        alert(this===window?"this===window":"this===object");
      var object = { 
        name : "My Object", 
        getNameFunc : function(){
    alert(this===window?"this===window":"this===object");
    //临时函数
          var _f =  function(){
    alert(this===window?"this===window":"this===object"); 
            alert(this.name); 
          };
    return function(){
    _f.call(object);//这样的话this就绝对指向你object
    //也可以call window
    //_f.call(window);//this绝对指向window
    }     }   };
      object.getNameFunc()();
    </script>