2015-07-04 30 views
0

这是我的代码:为什么我的Javascript对象成员在构造函数之前被初始化为onThen?

SLVD.promise = function() { 
    delete this.data; 
    delete this.callBack; 
    delete this.babyPromise; 
}; 
SLVD.promise.prototype.then = function(callBack) { 
    if(this.data) { 
     return callBack(this.data); 
    } 
    else { 
     this.callBack = callBack; 

     this.babyPromise = new SLVD.promise(); 

     return this.babyPromise; 
    } 
}; 
SLVD.promise.prototype.resolve = function(data) { 
    if(this.callBack) { 
     var tPromise = this.callBack(data); 

     if(this.babyPromise) { 
      if(!(tPromise instanceof SLVD.promise)) { 
       this.babyPromise.resolve(tPromise); 
      } 
      else if(tPromise.data) { 
       this.babyPromise.resolve(tPromise.data); 
      } 
      else { 
       tPromise.callBack = this.babyPromise.callBack; 
       if(this.babyPromise.babyPromise) { 
       tPromise.babyPromise = this.babyPromise.babyPromise; 
       } 
      } 
     } 
    } 
    else { 
     this.data = data; 
    } 
}; 
SLVD.promise.as = function(data) { 
    var promise = new SLVD.promise(); 
    promise.resolve(data); 
    return promise; 
}; 

这是一个承诺制度。 (是的,我知道那里已经有承诺系统了,请不要在这方面搞砸我。)但是,当构造函数运行时,成员callBack已经设置为“onThen(value)”。当我尝试在构造函数中删除它时,它仍然如此。有人对这个有了解吗?

其他潜在有用的信息:

  • 构造函数的调用是新SLVD.promise();
  • 我给出了整个类的定义。没有继承,我没有其他隐藏的原型属性。
  • 我已经在记事本++中的文件中进行搜索,我绝对没有使用过这个名字。
  • 我在Firefox中运行这个。
  • 我试着将callBack重命名为奇怪的事情,以防万一它是一个保留字的种类,但它没有帮助。

此图像显示的代码在暂停后我调用构造函数删除线调试器... Weird error

编辑:对于这个问题,this.babyPromise也预定义...(即使在删除之后)。为什么?

+1

不要使用删除,它会减慢一切。而是将值更改为null或0或空字符串或任何falsey。 – colecmc

+0

虽然这不是问题。在构造函数调用中不应该预先定义任何东西。 – nyttimangus

+0

请告诉我们您如何调用此代码以及如何使用它,因为这可能是理解您的问题的关键。例如,你总是创建一个新的对象,或者你在重复使用同一个对象吗? – jfriend00

回答

0

正如我在评论中指出的那样,问题变成了Firebug(v 2.0.11)的一个问题。我转而使用Chrome及其调试器,从那时起我就没有像这样的任何问题。

相关问题