Javascript OOP类-将属性分配给函数
也许这个问题已经解决了,但在这里找不到合适的答案。如果是这样的话,我会道歉。问题是:Javascript OOP类-将属性分配给函数,javascript,jquery,oop,Javascript,Jquery,Oop,也许这个问题已经解决了,但在这里找不到合适的答案。如果是这样的话,我会道歉。问题是: function Aclass(){ this.value1 = "a first value" this.value2 = pulldata() function pulldata(){ $.getJSON("data.json",function(data){ return data }) } } var obj
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的作用域之外不可用,我不确定最好的解决方法是什么。$。getJSON对“data.json”URL进行异步ajax调用。您给它的第二个参数是回调,它在ajax调用完成时被调用。 然而,您的pulldata函数只是在不等待答案的情况下运行,因此返回undefined 对于异步调用,不可能精确地执行您正在尝试执行的操作(而且您永远不应该使用同步调用) 你必须重写你的代码来完成回调中的工作。回调是“函数(数据){}”参数 但是,如果您调用的函数不是异步的,那么JS作用域就是这样工作的,应该解决您的问题:
function Aclass() {
var that = this;
this.value2 = 'not set';
var pullData = function() {
someCallToSomethingWithACallback(function() {
that.value2 = 'set';
}
}
}
$.getJSON对“data.json”URL进行异步ajax调用。您给它的第二个参数是回调,它在ajax调用完成时被调用。 然而,您的pulldata函数只是在不等待答案的情况下运行,因此返回undefined 对于异步调用,不可能精确地执行您正在尝试执行的操作(而且您永远不应该使用同步调用) 你必须重写你的代码来完成回调中的工作。回调是“函数(数据){}”参数 但是,如果您调用的函数不是异步的,那么JS作用域就是这样工作的,应该解决您的问题:
function Aclass() {
var that = this;
this.value2 = 'not set';
var pullData = function() {
someCallToSomethingWithACallback(function() {
that.value2 = 'set';
}
}
}
您的pullData()
函数实际上没有显式返回任何内容,因此它的返回未定义-这意味着您在记录obj.value2时看到的内容是正确的(尽管不需要)
在pullData()
内部调用$.getJSON()
并将匿名函数作为回调传递给它,正是该匿名函数返回数据
,但由于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()
函数实际上不会显式返回任何内容,因此,它的返回是未定义的——这意味着您在记录obj.value2时看到的内容是正确的(尽管不是期望的)
在pullData()
内部调用$.getJSON()
并将匿名函数作为回调传递给它,正是该匿名函数返回数据
,但由于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()
构造函数以获取一个参数,该参数是类准备就绪时(即,$)的结果可用后要执行的回调函数。对。谢谢你的澄清,这很有意义。我怀疑有类似的事情。我想最好先加载JSON,然后在回调上实例化这个类,对吧。谢谢你的澄清,这很有意义。我怀疑有类似的事情。我想最好先加载JSON,然后在回调上实例化这个类,对吧。很好的演示,这是它应该做的。谢谢,好的。很好的演示,这是它应该做的。谢谢