setTimeOut 在类内部的方法内进行递归,有问题
原来,这个函数放在外面的时候可以执行
function doAction() {
……
setTimeout ( "doAction() ", 20);
}
现在我想把封装到类中,就不行了
function myClass()
{
function doAction() {
……
setTimeout ( "doAction() ", 20);
}
}
------解决方案--------------------看
setTimeout ( "myClass.doAction() ", 20);
------解决方案--------------------这个doAction为什么不写在外面
function doAction() {
……
setTimeout ( "doAction() ", 20);
}
------解决方案--------------------试试这个
setTimeout( "this.doAction() ",20);
------解决方案--------------------调用的方法用下面的
<script language=javascript defer>
function myClass(objTest)
{
this.doAction=doAction
function doAction() {
var obj=document.getElementById( "div1 ")
obj.innerHTML=parseInt(obj.innerHTML)+1
if(parseInt(obj.innerHTML)> 50)
{
return;
}
this.doAction()
}
}
var a = new myClass
a.doAction();
</script>
<div id= "div1 "> 1
</div>
------解决方案--------------------因为你的doAction函数是隶属于myClass的一个子函数,或者说是一个局部变量,局部变量对于外部是不可访问的,你需要有一个方法,让window对象找得到这个doAction就可以了.
<div id= "tt "> </div>
<SCRIPT LANGUAGE= "JavaScript ">
<!--
function myClass()
{
this.value = 1;
this.doAction = function()
{
var _self = this;
this.value += 1;
document.getElementById( "tt ").innerHTML = this.value;
setTimeout(function(){_self.doAction();}, 20);
}
}
new myClass().doAction();
//-->
</SCRIPT>
演示代码一段.
------解决方案--------------------function myClass()
{
function doAction() {
……
setTimeout (doAction, 20)
}
}
注意这里setTimeout (doAction, 20), 很多人以为这里用setTimeout ( "doAction() ", 20)
和setTimeout (doAction, 20)是一样的, 一般情况下是一样的, 但你这种情况就不同了, 呵呵
------解决方案--------------------function myClass()
{
function doAction() {
……
setTimeout (arguments.callee, 20)
}
}
//这样也行