var obj = function(){
this.status = 0,
this.init();
 };
obj.prototype = {
init : function(){
return this.status=1;
}
};function test(){
var newobj = new obj();
if(newobj.status){
do...
}
}
这样竟然在ie6/chrome下无法执行test()里的if代码,我在var newobj = new obj();和init()里的return this.status=1;后面加了alert(...status)发现,先是0后是1,就是说,还未执行完newobj = new obj();已先读取了newobj.status。
天啊,我该如何判断newobj = new obj();已经执行完毕?!

解决方案 »

  1.   

    var obj = function(){
        this.status = 0,
        this.init();
    };
    obj.prototype = {
        init: function(){
            return this.status=1;
         }
    };function test(){
      var newobj = new obj();
      if (newobj.status){
         alert(1);
      }
    }test();
    执行都很正常
      

  2.   

    对,上面的代码是我精简出来的,没问题。
    但我加了settimeout后,问题来了:var obj = function(){
    this.tt = 'a';
        this.init();
    };
    obj.prototype = {
    status : 0,
    isok:false,

        init: function(){
            this.tt='b';
    this.two();
         },
     
     two: function(){
      var self = this;
      var time = setTimeout(function(){self.status =1;},500);
    this.isok = true; 
    }
    };function test(){
      var newobj = new obj();
     var s='';
    for(key in newobj){
    if(typeof newobj[key]=='function') continue;
    s +=key;
    s +='==>'
    s +=newobj[key];
    s +='||';
    }
    alert(s);
    }test();
      

  3.   

    我测了下,在Firefox和Chrome下,加不加setTimeOut,结果都一样的
    tt==>||isok==>true||status==>0||,
    但IE8执行的结果确是:status==>0||tt==>||isok==>true||个人觉得在LZ的程式里加不加setTimeOut('',500)没有影响,
    执行顺序不同可能缘于浏览器的原因
      

  4.   

    no,加setTimeout是为了防备等待文档或图片下载完成。
    下载完了对象的status才为1。后面我用函数递归来解决。但在IE下容易内存溢出。