在对象中调用对象方法 - 错误:无法读取未定义的属性

Calling object method within the object—error: cannot read property of undefined

本文关键字:对象 读取 未定义 属性 错误 调用 方法      更新时间:2023-09-26

我正在尝试在同一个对象中调用getQuestions()它是一个方法。但是当我尝试读取 quizz.config.allQuestions 属性时,我收到一条错误消息,内容为"未捕获的类型错误:无法读取未定义的属性'getQuestions'"。我在这里缺少什么吗?

var quizz = {
    config: {
        urlJSON: 'questions.json',
        allQuestions: quizz.getQuestions()
    },
    getQuestions: function() {
        $.getJSON(quizz.config.urlJSON, function(questions) {
        return questions;
        });
    }
};

当您尝试分配给allQuestions时,quizz对象尚未完成初始化。因此,您必须在创建对象后执行此操作。

var quizz = {
    config: {
      urlJSON: 'questions.json'
      // don't declare allQuestions
    },
    getQuestions: ...
};
quizz.allQuestions = quizz.getQuestions();

这样做的问题是$.getJSON是一个异步函数,这意味着它不会立即返回该值。这就是为什么它有一个回调。相反,您可以尝试像这样定义getQuestions

getQuestions: function(callback) {
  $.getJSON(quizz.config.urlJSON, callback);
}

然后你可以得到这样的值:

quizz.getQuestions(function(questions) {
  quizz.config.allQuestions = questions;
});