我有一个相当复杂的对象,并且包含了一个简化版本(取出了不必要的函数)。当我发起它并且我不知道为什么时它不起作用。 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
答案 0 :(得分:0)
您在评论中使用的正斜杠是语法错误。此外,您的steps
对象中没有this.data
密钥,这就是该行引发错误的原因。
我还在.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);