这是我的“类”(扩展原型)及其构造函数:
encsTable = function(encsData) {
var that = this;
var drfrd = $.Deferred();
this.init(encsData).done(function(){
drfrd.resolve(that);
});
return $.when(drfrd).done().promise();
}
$.extend(encsTable.prototype, {
init: function(encsData) {
var drfrd = $.Deferred();
$.each(encsData, function(index, val){
/*
...
Some async AJAX calls
...
*/
if (index == encsData.length - 1){
drfrd.resolve();
}
});
return $.when(drfrd).done().promise();
}
});
我正在努力创建encsTable
的新对象。以下是我目前的工作方式:
newEncsTable = new encsTable(encs).done(function(val){
val.some_method();
});
正如您所看到的那样,这不是一个好方法。 newEncsTable
不是encsTable
对象,而是Promise对象。为了访问encsTable
的其他方法,我必须使用val
变量。我想做这样的事情:
newEncsTable = new encsTable(encs).done().get_return_value();
newEncsTable.some_method();
我知道延迟对象的工作方式并非如此,但有没有解决办法?
我必须等待构造函数在执行some_method
函数之前完成,因为我在这个函数中使用了encsTable
类的私有属性。其中一些属性取决于构造函数内执行的AJAX调用。
我决定将AJAX调用从构造函数移动到some_method
函数。多亏了我摆脱了构造函数中的承诺。