那个this已经变成其他的了。因为不是你的object调用的。
我也有过这样的问题,不知道如何直接解决问题,只好使用window.yourname取实现。
不知道是否有帮助。function Test() {
this.i=0;
this.test = function() {
alert(i)
i++;
if(i<10)
setTimeout("window."+this.id+".test()",10);
}
         this.id=yourname;
         eval("window."+this.id+"=this")
return this;
}var obj = new Test();
obj.test();

解决方案 »

  1.   

    [ To: dogfish ]
       this.id=yourname;
       eval("window."+this.id+"=this")
    上面两句代码的意思好象是把this对象保存到window.youname中,
    可是当我
       var obj1 = new Test();
       var obj2 = new Test();
    后window.youname中的this就变成是obj2了,obj1又没了感谢你的帮助..谢谢!!!!------------------------------------------
    同样的代码我把setTimeout去掉function Test() {
      this.i=0;
      this.test = function() {
        alert(i)
        i++;
        if(i<10)
          this.test;
      }  return this;
    }var obj = new Test();
    obj.test();去掉后是可以运行正确,但加上setTimeout后,this就变了,好像是变成了窗体(window)的对象了
    继续求救......进来的帮忙顶下,有分...
      

  2.   

    问题已经解决function t(val) {
    alert(val);
    val++;
    if(val<10)
    setTimeout("t(" + val + ")",10);
    }function Test() {
    this.i=0;
    this.test = t;
    return this;
    }var obj1 = new Test();
    var obj2 = new Test();
    obj1.test(0);
    obj2.test(8);但我却不知道为什么?
    谁来帮忙解释下...[高分]
      

  3.   

    我只可以这样理解
    setTimeout("methods();",1000);
    methods()方法必须是全局的,也就是说setTimeout中运行的是全局的方法或变量
    所以之前的this是window的对象就很好理解了.
    不知道理解是否到位..高手给予指点!!谢谢!!!!
      

  4.   

    个人理解:setTimeout方法的第一个参数可以是一个函数或一段可以执行的js语句,函数对于window来说必须是可见的。构造函数Test中要做的只是指定t是Test对象可以调用的一个方法,在t方法里setTimeout()方法设置t的执行频率
      

  5.   

    To:DeluxWorld(曾经的你)
      引用"setTimeout方法的第一个参数可以是一个函数或一段可以执行的js语句,函数对于window来说必须是可见的。"
      是的,因为所有全局的方法和变量都是在window对象下即:function func(){alert("test");}
    可以通过func()或window.func()调用~在这里非常感谢大家的回帖,特别是 dogfish(dogfish) 和 DeluxWorld(曾经的你)
      

  6.   

    [ To: dogfish ]
       var obj1 = new Test();
       var obj2 = new Test();
    后window.youname中的this就变成是obj2了,obj1又没了
    obj1没有消失,估计因为setTimeout("methods();",1000);按时间运行方法,但alert()方法只能弹出一个窗口,给人的感觉就像是obj1没了。
        请高手指点。
      

  7.   

    function Test() {
    this.i=0;
    this.test = function() {
    alert(i)
    i++;
    if(i<10)
    setTimeout("window."+this.id+".test()",10);
    }
             this.id="abcdefg"+Math.round((Math.random()*1000000));
             eval("window."+this.id+"=this")
    return this;
    }var obj = new Test();
    obj.test();