我有一个相当复杂的对象,并且包含了一个简化版本(删除了不必要的功能)。当我启动它时它不起作用,我不知道为什么。 Safari 告诉我:[Error] TypeError: undefined is not an object (evaluating 'this.data.steps[index]')
但我不知道为什么。代码如下:
function Stepper (url) {
this.index = 0;
this.url = url;
this.stepsn = 0;
this.data = {}
this.init = function () {
var XHR = $.getJSON(this.url, function (json) {
this.data = json;
this.stepsn = this.data.steps.length;
});
};
this.getstep = function (index) {
return this.data.steps[index];
};
this.init();
}
\\Instantiation
var url = "lesson.json"; //lession.json is valid(I checked)
var stepper = new Stepper(url);
感谢您的帮助,如果您愿意的话。
Safari 8.0.7 Included jquery 1.11.3
最佳答案
您在评论中使用的正斜杠是语法错误。此外,您的 this.data
对象中没有 steps
键,这就是该行抛出错误的原因。
我还在您的 .getJSON
调用中使用了 bind,以便您引用 Stepper 对象。请参阅下面的固定代码:
function Stepper (url) {
this.index = 0;
this.url = url;
this.stepsn = 0;
this.data = {}
this.init = function () {
var XHR = $.getJSON(this.url, function (json) {
this.data = json;
this.stepsn = this.data.steps.length;
}).bind(this);
};
this.getstep = function (index) {
return this.data.steps[index];
};
this.init();
}
//Instantiation
var url = "lesson.json"; //lession.json is valid(I checked)
var stepper = new Stepper(url);
关于javascript - JS 对象不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31660673/