,如果我使用超时如下解决秒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