gpt4 book ai didi

javascript - ajax 调用后无法访问原型(prototype)模型中的构造函数变量

转载 作者:行者123 更新时间:2023-11-28 20:50:07 26 4
gpt4 key购买 nike

当我使用回调从异步调用返回时,我无法访问类的构造函数。

在这种情况下,我无法访问 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;
}
}

最佳答案

好吧,有很多要点:

第一

在原型(prototype)创建时,请声明变量。现在您正在创建“test”、“callback”和“getRequest”全局变量,因为您不使用“var”

MyClass1.prototype = function () {
var test = function () {
// some code...
};

var callback = function () {
// some code...
};

// And more code...
};

“test”声明末尾的逗号之所以有效,是因为它是一个运算符,但我很确定它不是您想要做的。

或者您可以直接创建函数:

MyClass1.prototype = function () {
function test() {
// some code...
}

function callback() {
// some code...
}

// And more code...
};

第二

您正在将“prototype”属性分配给函数

MyClass1.prototype = function() { ... };

这意味着你的类的原型(prototype)是一个函数,它有“call”、“apply”、“bind”方法,但没有“test”或“callback”方法。也许您想创建一个立即调用函数表达式 (IIFE)

MyClass1.prototype = (function() {
function methodA() {
// some code...
}

return {
methodA: methodA
};
})();

或者一个简单的对象:

MyClass1.prototype = {
methodA: function() {
// some code...
},
methodB: function() {
// some code...
}
};

第三

我不明白你的代码在做什么,“MyClass2”在哪里定义,它扩展了“MyClass1”?

第四

您将 MyClass1 原型(prototype)上的“test”属性分配给一个函数,但随后,在构造函数上将“test”属性分配给一个数字,也许您想使用不同的属性。

第五

在这一行:

success: callBack.call(this, data)

您正在调用函数“回调”(我不知道它来自哪里),我重复一遍,您正在调用它,而不是将其设置为回调,您只是调用该函数并告诉 $.ajax回调将是“callback.call(this, data)”返回的值,可能是“未定义”。

如果你想将“回调”函数设置为ajax请愿的回调,你需要传递一个函数,并且在该函数内部,当数组到达时你可以做任何你想做的事情,在本例中调用“回调”,但是您必须保存“this”变量才能使用它:

var self = this;
$.ajax({
url: "test.html",
success: function(data) {
callBack.call(self, data);
}
})

我想数据变量来自ajax请愿......

正如您所见,当代码未经测试时,很难给出准确的响应,因此下次请提供您的代码。

如果我所有的假设都是正确的:这就是您需要的代码:http://jsfiddle.net/pw3hj/

关于javascript - ajax 调用后无法访问原型(prototype)模型中的构造函数变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12640396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com