2015-07-04 31 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及其調試器,從那時起我就沒有像這樣的任何問題。

相關問題