日期:2014-05-16  浏览次数:20408 次

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)
}
}
//这样也行