当我使用回调从异步调用返回时,我无法访问类的构造函数。
在这种情况下,我无法访问Myclass1构造函数中定义的测试变量
我无法找到解决方案,我做错了什么?
var MyClass1 = function () {
this.test = 5;
};
MyClass1.prototype = function () {
//This is the function which calls another Myclass2 which contains the function for ajax //request
test = function () {
myClass2 = new MyClass2();
myClass2.getRequest.call(this, callback);
},
//This is the call Back
callback = function () {
alert(this.test); /*<---Cannot access this,shows undefined.In firebug it show this.test is not defined*/
};
return {
test: test,
callback: callback
}
}
MyClass2.prototype = function () {
getRequest = function () {
//make an async call set the success to the callback .I have propagated the data to //myclass1
$.ajax({
url: "test.html",
success: callBack.call(this, data) //<--I call the callback using myClass1
})
}
return {
getRequest: getRequest;
}
}
答案 0 :(得分:3)
好的,所以有很多要点:
<强>第一强>
在原型创建上,请声明变量。现在你正在创建&#34;测试&#34;,&#34;回调&#34;和&#34; getRequest&#34;全局变量,因为你不使用&#34; var&#34;
MyClass1.prototype = function () {
var test = function () {
// some code...
};
var callback = function () {
// some code...
};
// And more code...
};
&#34;测试结束时的逗号&#34;声明是有效的,因为它是一个操作员,但我很确定它不是你的意思。
或者您可以直接创建功能:
MyClass1.prototype = function () {
function test() {
// some code...
}
function callback() {
// some code...
}
// And more code...
};
<强>第二强>
您正在分配&#34;原型&#34;属性到函数
MyClass1.prototype = function() { ... };
这意味着你的班级的原型是一个功能,他有方法&#34; call&#34;,&#34; apply&#34;,&#34; bind&#34;但不是&#34;测试&#34;也没有&#34;回调&#34;。可能你想创建一个立即调用的函数表达式(IIFE)
MyClass1.prototype = (function() {
function methodA() {
// some code...
}
return {
methodA: methodA
};
})();
或一个简单的对象:
MyClass1.prototype = {
methodA: function() {
// some code...
},
methodB: function() {
// some code...
}
};
<强>第三强>
我不明白你的代码在做什么,在哪里&#34; MyClass2&#34;定义,它扩展&#34; MyClass1&#34;?
<强>四强>
您正在分配&#34;测试&#34;将MyClass1的原型属性转换为函数,但是然后,在构造函数上指定&#34; test&#34;财产到一个数字,也许你想使用不同的属性。
<强>第五强>
在这一行:
success: callBack.call(this, data)
您正在调用函数&#34;回调&#34; (我不知道它来自哪里),我再说一遍,你正在调用它,而不是将它设置为回调,你只是调用函数并告诉$ .ajax而不是回调将是&#34; callback.call(this,data)&#34;返回的值,可能&#34; undefined&#34;。
如果你想设置&#34;回调&#34;函数作为ajax请求的回调你需要传递一个函数,在这个函数内部你做任何你想做的事情,当数组到达时,在这种情况下调用&#34;回调&#34;,但你必须保存&#34; ;这&#34;变量以便使用它:
var self = this;
$.ajax({
url: "test.html",
success: function(data) {
callBack.call(self, data);
}
})
我认为数据变量来自ajax请愿书......
正如您所看到的那样,在未对代码进行测试时,确实难以给出准确的响应,以便下次请提供您的代码。
如果我的所有假设都是正确的:这是一个类似你需要的代码:http://jsfiddle.net/pw3hj/