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

请高手解释JS代码解决方案

2012-03-25 
请高手解释JS代码var name The Window  var object {    name : My Object,    getNameFunc : fu

请高手解释JS代码
var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
      return function(){
        return this.name;
      };
    }
  };
  alert(object.getNameFunc()()); //The Window
================================================================================
var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
      var that = this;
      return function(){
        return that.name;
      };
    }
  };
  alert(object.getNameFunc()()); //My Object

[解决办法]

JScript code
var name = "The Window";  var object = {    name : "My Object",    getNameFunc : function(){      var that = this;      return function(){        return that.name;      };    }  };//定义了一个变量object,指向了一个对象,对象有一个name属性和一个getNameFunc属性  alert(object.getNameFunc()()); //My Object    var tmp=object.getNameFunc();//调用object的getNameFunc方法,该方法返回一个函数,函数体:/*        function(){      var that = this;//this,谁调用this指向谁,这里this指向obejct      return function(){        return that.name;      };    }        执行后得到tmp=funciont(){return object.name} */   object.getNameFunc()();//执行用object的getNameFunc方法得到的函数,即tmp();
[解决办法]
这段JS并不难解释啊 
楼主还是先学基础吧
[解决办法]
object.getNameFunc()(); 
这个执行结果,都是得到返回的getNameFunc函数并执行,对于return function()这种形式,执行的主体都是window,所以this代表window.自然有第一种结果。

第二种,就是为了避免this指向window而得不到object内的本地成员变量,所以用var that = this;来保存object.因为对于object.getNameFunc()来说,getNameFunc()里的this指向object.

总结一下就是
object.getNameFunc()里的this指向object.
object.getNameFunc()(它返回一个顶级函数到window对象里成为window的成员函数)() 里的this指向window.
[解决办法]
其实就是想Hashtable一样:
有两个key,两个value
key1:name,key2:getNameFunc
Value1:My Object,value2:就是定义的函数。

在JS中函数同也是变量,可以赋值的。
[解决办法]
没细看,没注意到这段代码
JScript code
var name = "The Window";//最外层定义一个变量,世纪上是window添加了一个属性//alert(window.name);  var object = {    name : "My Object",    getNameFunc : function(){      return function(){        return this.name;      };    }  };    //类似地    var tmp=object.getNameFunc();/*        getNameFunc : function(){      return function(){        return this.name;      };    }    tmp=function(){return this.name};//this作用域,还是谁调用this就指向谁,可以试一下下面的代码:    var testOb={name:'test'};    alert(tmp.call(testOb));*/  alert(object.getNameFunc()()); /*    再看这句代码,可以翻译为alert(tmp());即alert(function(){return this.name}());现在的关键就是这个this指向哪里,还是一样,谁调用就指向谁,这里指向的是window对象,可以试一下,把代码改成    var object = {    name : "My Object",    getNameFunc : function(){      return function(){                alert(this===window);//这里弹出true        return this.name;      };    }  };也可以看出,在最外层用var 定义一个变量或函数,实际上都是为window添加了属性 */ 

热点排行