我正在开发一个Javascript图书馆,我想按照以下方式使用。
var obj = new Lib().actionOne();
此调用应填充obj中的“transcript”和“session”成员变量。 然后我想打电话:
obj.actionTwo();
将在前一次调用中使用填充的“transcript”和“session”对象。
在我的图书馆下面找。
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的成员变量是未定义的。解决方法是什么?