也许这个问题已经得到解决,但在这里找不到合适的答案。如果是这样的话,抱歉。问题是这样的:
function Aclass(){
this.value1 = "a first value"
this.value2 = pulldata()
function pulldata(){
$.getJSON("data.json",function(data){
return data
})
}
}
var obj = new Aclass()
console.log(obj.value1)
console.log(obj.value2)
结果:“第一个值”然后“未定义” 数据变量在 pulldata 的范围之外不可用,我不确定解决这个问题的最佳方法是什么。
最佳答案
您的 pullData()
函数实际上并未显式返回任何内容,因此它的返回未定义 - 这意味着您在记录 obj.value2 时看到的内容是正确的(尽管不是期望的)。
在 pullData()
中,您正在调用 $.getJSON()
并向其传递一个匿名函数作为回调,并且正是该匿名函数返回 data
但返回不会去任何地方,因为 ajax 调用是异步的,并且回调直到稍后才会发生。
你可以试试这个:
function Aclass(classInitialisedCallback){
var self = this;
this.value1 = "a first value";
this.value2 = "not available yet";
$.getJSON("data.json",function(data){
self.value2 = data;
if (typeof classInitialisedCallback === "function")
classInitialisedCallback(self);
});
}
var obj = new Aclass(function(newInstance) {
// can use obj or newInstance to refer to the object
console.log(obj.value1);
console.log(newInstance.value2);
});
也就是说,设置您的 Aclass()
构造函数以获取一个参数,该参数是在类准备好时(即在 $.getJSON 的结果之后)执行的回调函数()
可用。
关于Javascript OOP 类 - 将属性分配给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8413846/