我正在开发一个 Javascript 库,我想按如下方式使用它。
var obj = new Lib().actionOne();
此调用应填充 obj 中的“transcript”和“session”成员变量。然后我想打电话:
obj.actionTwo();
它将在上一次调用中使用填充的“成绩单”和“会话”对象。
在我的图书馆下面找到。
var xmlhttp = null;
function Lib() {
this.transcript = null;
this.session = null;
return this;
}
Lib.prototype = {
_initRequest : function() {
// create xmlhttp request here
},
_consumeService : function(callback) {
this._initRequest();
xmlhttp.open("GET", "THE URL", true);
var self = this;
xmlhttp.onreadystatechange = function(self) {
if(xmlhttp.readyState==4 && xmlhttp.status==200 ){
callback.call(self);
}
};
xmlhttp.send();
},
actionOne: function() {
var connUrl = "SOME URL";
this._consumeService(this._actionOneCallback);
return this;
},
_actionOneCallback : function() {
var jsonObj = JSON.parse(xmlhttp.responseText);
this.session = jsonObj.session
this.transcript = jsonObj.transcript;
this.isActionOneDone = true;
xmlhttp = null;
},
actionTwo : function() {
// use this.session and this.transcript
}
};
问题是 actionOneCallback() 函数不会填充 'obj' 成员,尽管我将 'self' 引用传递给它。因此,当我调用 'obj.actionTwo();' 时,obj 的成员变量是未定义的。解决方法是什么?