这是我第一次使用JS对象而且我很困惑为什么这个属性总是未定义的:
function Rotator() {
this.interval = 300;
this.image = 0;
this.images = undefined;
}
Rotator.prototype.Fetch = function(links) {
console.log("Fetch called");
this.images = links;
}
Rotator.prototype.Current = function() {
if (this.images == undefined) {
console.log("Error, images is undefined");
}
return this.images[this.image];
}
r = new Rotator;
$.getJSON("./data.php", function (data) {
r.Fetch(data.images);
});
console.log(r.Current());
我得到的错误是:
未捕获的TypeError:无法读取未定义的属性“0”
返回的JSON工作正常,并且fetch在控制台中被标记为已调用(记录时数据也很好)。为什么Rotator.images总是未定义?
编辑:一些console.log结果:
data.images
中记录$.getJSON
会产生正确的数据。links
中记录Fetch
会产生正确的数据。this.images
中记录Fetch
会产生正确的数据。this.images
中记录Current
会导致无效。答案 0 :(得分:2)
因为获取JSON是异步的,所以这就是数据仅在回调函数中可用的原因。
$.getJSON("./data.php", function (data) { // callback function
r.Fetch(data.images); // this will run when the data is available
});
console.log(r.Current()); // this will run immediately -> data.images is null
依赖于数据的所有内容都应放在回调函数中!
答案 1 :(得分:0)
您不能以这种方式使用undefined
。请改用null
:
this.images = null;
和
if (this.images == null) {
如果它为null,您还必须避免使用images属性:
Rotator.prototype.Current = function() {
if (this.images == null) {
console.log("Error, images is undefined");
return null;
}
return this.images[this.image];
}
答案 2 :(得分:0)
这会让我的脖子上有纯粹主义者还是可以接受?
Rotator.prototype.Current = function() {
if (this.images) return this.images[this.image];
console.log("Error, images is undefined, null, empty or 0");
}