,如果我使用超時如下解決秒3推遲後,下面的代碼工作...「返回deferred.promise(本)」是返回undefined
var myConstructor = function(){
var deferred = $.Deferred();
this.message = "yo";
setTimeout(function(){
deferred.resolve();
}, 3000);
return deferred.promise(this);
}
var myObj = new myConstructor().done(function(){
console.log(myObj.message);
})
,但如果我解決馬上不推遲超時如下...
var myConstructor = function(){
var deferred = $.Deferred();
this.message = "yo";
deferred.resolve();
return deferred.promise(this);
}
var myObj = new myConstructor().done(function(){
console.log(myObj.message);
})
...然後我得到以下errror:在執行console.log行「無法讀取屬性‘消息’未定義」。爲什麼解析延遲立即導致myObj未定義?
編輯:
在我審查@ T.J。克羅德的驚人答案,很顯然,這是我需要做出對代碼的變化:
var myConstructor = function(){
var deferred = $.Deferred();
this.message = "yo";
deferred.resolve();
return deferred.promise(this);
}
var myObj = new myConstructor();
myObj.done(function(){
console.log(myObj.message);
})
,因爲完成回調被立即調用,所以'我在調用函數之前不會創建Obj'變量 – 2014-09-24 21:12:57
此外,設計並不好。我寧願建議在構造函數上有一個「靜態」函數,它返回一個承諾,並用「類」的新實例解決它。 – 2014-09-24 21:18:12
@FelixKling我在理解你的意思時有點麻煩。你認爲你可以輸入一些代碼嗎? – 2014-09-24 21:32:58