javascript闭包问题,求解答?

weilingfeng98 发布于 2012/02/10 17:14
阅读 264
收藏 0
function test(){
var name = "test";
return {
getName : function(){
alert(name);
},
sayHello :function(){
this.getName();
},
init :function(){
//this.sayHello();
//setInterval(this.sayHello,1000); //1处
                                //setInterval(t.sayHello,1000);    //2处
setInterval((function(that){     //3处
return function(){that.sayHello()}
})(this),1000);
}

}
}
var t = test();
t.init();
在setInterval()中直接调用this.sayHello,sayHello中的this指向了window对象,但是换成第二种情况,this换成对象 t 对象 ,也不能正确取到,setInterval函数的运行机制是怎样的?
加载中
0
诸葛非卿
诸葛非卿

看来帮不了你了,对JS中的类成员的定义和使用一直都不是很熟悉。

看来是帮不了你了。。

不过,你在return这些对象数据的时候好像缺少一个用于接收的变量呀?比如:text(getNumb)什么的!!

0
哆唻咪
哆唻咪
补充了点东西可以加深理解
var name = "window"; 
function test(){
 var name = "test";
 return {
 getName : function(){
 alert(name);
 },
 sayHello :function(){
 this.getName();
 },
 init :function(){
         //setInterval(this.sayHello,1000); //1处
 setInterval(t.sayHello,3000);    //2处
          //setInterval((function(that){                    
     //return function(){that.sayHello()}
 //})(this),3000);
 }
 }
}
var t = test();
t.getName(); //调用对象的getName
t.sayHello(); //调用对象的sayHello
t.init();

需要说明几点:
1. setInterval的第一个参数是个function类型
2. setInterval是window的方法。
3. 我的理解setInterval的机制只是用来回调该function,但是该function的所属对象(负责调用的)仍然是window来完成,类似如下代码:
//当然内部不存在这个funcName
 function setIntervalFunc(funcName, func, time){
 //将该方法传给window
 this[funcName] = func;
 //等待time
 //执行该方法
 this[funcName]();
 }

而如果需要指明对象,则需要传入改对象,改方式就应该为:
function setIntervalFunc(object,  funcName , time){
 //等待time
 //执行该方法
  object [funcName]();
 } 

上面的第3中就类似上面的调用方法,把对象传了进去。

4. 理解this,有句话很重要:
this always refers to the “owner” of the function we're executing
返回顶部
顶部