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重命名爲奇怪的事情,以防萬一它是一個保留字的種類,但它沒有幫助。
此圖像顯示的代碼在暫停後我調用構造函數刪除線調試器...
編輯:對於這個問題,this.babyPromise也預定義...(即使在刪除之後)。爲什麼?
不要使用刪除,它會減慢一切。而是將值更改爲null或0或空字符串或任何falsey。 – colecmc
雖然這不是問題。在構造函數調用中不應該預先定義任何東西。 – nyttimangus
請告訴我們您如何調用此代碼以及如何使用它,因爲這可能是理解您的問題的關鍵。例如,你總是創建一個新的對象,或者你在重複使用同一個對象嗎? – jfriend00