我在实现一个javascript类时遇到问题,其构造函数由ajax调用填充。从文件中读取数据并以异步方式正确填充类属性。以下代码可以正常使用:
function Pattern(file){
this.pattern = new Array();
$.ajax({
type: 'GET',
url: file,
dataType: 'text',
context: this,
success: function (data){
...
this.buildPattern(data);
},
error: function (jqXHR, textStatus, errorThrown){
alert('Problem loading file \'' + file + '\'');
}
});
}
Pattern.prototype.buildPattern = function(pattern){
do{
...
this.pattern[i][j] = pattern[i][j];
...
}while(pattern[k] != '!');
}
在实例化类之后访问另一个方法时会出现问题:
Pattern.prototype.getPattern = function(number){
...
return this.pattern;
}
使用此代码:
var pattern1 = new Pattern('filename.ext');
var myPattern1 = pattern1.getPattern(1);
由于在类中初始化我的属性的异步方法,在类创建之后调用方法getPattern()会返回一个空结果,因为this.pattern尚未完成加载和后处理。
我知道存在jQuery对象Deferred和Promise但是我没有使用javascript和类找到它们的任何实现。
有人能指出我正确的方向吗?
答案 0 :(得分:0)
很抱歉写这个作为答案,而不是评论,我的平板电脑暂时不会让我写评论。
我只是觉得你可能会触发一个事件(可能使用PubSub)并将使用该类的代码放在一个EventHandler函数中,该函数在完全加载类后触发。