当前位置:文档之家› setinter对象参数

setinter对象参数

在js的对象中使用setTimeout和setInterval调用对象自身的方法是个困扰了我时间的问题,真实想的很简单:

setTimeout("this.mythod1();",3000);

岂知用起来不行,究其原因是setTimout是在全局范围内调用引号内的方法的,而在全局范围内this是无法使用的。

想了个土办法,在生成对象时要求将对象名作为构造函数的一个参数,这样就可以在setTimeout或setInterval中使用这个参数调用:

function myobj(objName){
https://www.doczj.com/doc/683291846.html,=objName;
......
}

myobj.prototype.mythod1(){
......
setTimeout(https://www.doczj.com/doc/683291846.html,+".mythod1();",3000);
}

但是总觉得这个办法有点笨,不像高手用的办法。

后来一个同事在网上找到篇文章(不好意思,记不得是哪个老兄的文章了),用了一个巧妙得多的方法:在对象内部随机生成一个唯一的字符串,将这个字符串赋给对象的属性,利用eval方法将this赋给以这个字符串为变量名的变量,由于eval的特性,那个变量是个全局变量,因此可以用这个全局变量作为setTimeout的参数,而这个变量名可以由对象的属性来引用,可以在setTimeout中用对象的属性与这个变量关联,具体代码如下:

function myobj(){
this.sid="myobj"+parseInt(Math.Random()*100000);
eval(this.sid+"=this");
......
}

myobj.prototype.mythod1(){
...
setTimeout(this.sid+".mythod1();",3000);
}

这个方法虽然巧妙,我还是不太满足,想出了一个办法,示例如下:

function myobj(){
this.id=https://www.doczj.com/doc/683291846.html,s.length;
https://www.doczj.com/doc/683291846.html,s[this.id]=this;
}
https://www.doczj.com/doc/683291846.html,s=new Array();
myobj.prototype.am=function (){
alert(this.id);
}
myobj.prototype.bm=function(){
setTimeout("https://www.doczj.com/doc/683291846.html,s['"+this.id+"'].am();",3000);
}
var a=new myobj();
var b=new myobj();
var c=new myobj();
a.bm();
b.bm();
c.bm();


相关主题
相关文档 最新文档