Javascript 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 = 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/

相关文章:

jQuery - 检查 DOM 元素是否已经存在

c++ - 使用 std::vector 时出现抽象类类型 'Shape' 错误的无效新表达式

java - 许多类引用数据库连接类的最佳方式

javascript - 正则表达式删除括号和/(正斜杠)形成字符串

javascript - 巴别塔 NodeJS ES6 : SyntaxError: Unexpected token export

javascript - Browserify 和 ReactJs.Net 服务器端渲染

c++ - 如何在成员函数线程中调用回调?

javascript - 使用非数字键对 JavaScript 数组进行数字转换和排序

javascript - 将 onChange javascript 函数延迟足够长的时间,以便另一个 javascript 完成

javascript - 在有事件的div内容上触发事件