我知道关于关联数组及其长度问题的常见问题,这个标题听起来非常熟悉。但是我还没有在Stack Overflow上找到解决我问题的方法。
问题是,.length
总是输出0而不是想要的数量,在这个测试用例中将是12.当我通过console.log
输出时,我得到12个条目,我可以看到具有正确值的length属性。我附上了我的萤火虫输出:
images: Array[12]
0: "img1.jpg"
1: "img2.jpg"
2: "img3.jpg"
3: "img4.jpg"
4: "img5.jpg"
5: "img6.jpg"
6: "img7.jpg"
7: "img8.jpg"
8: "img9.jpg"
9: "img10.jpg"
10: "img11.jpg"
11: "img12.jpg"
length: 12
__proto__: Array[0]
以下代码段填充数组:
this.images.push(el.toDataURL());
当我现在呼叫console.log(this,this.images,(this.images).length);
时,它始终为0而不是12。
任何帮助都将不胜感激。
小提琴上的剧本。 (在控制台上输出)
答案 0 :(得分:2)
当您说 this.img.onload 时,您将其设为异步,您的init会运行,但之后会立即运行getImages,后者会在该时刻发现aImages为空。 在运行getImages之前,您应该考虑检查是否已加载所有图像以获得正确的结果。
这是一个有效的修改示例。如果需要,您可以更多地调整它! http://jsfiddle.net/EL2xR/1/
interval = setTimeout(function() {
_this.getImages(from, to);
}, 1000);
检查代码中出现this.loaded的位置,我曾经知道一个标志已经加载了所有内容!然后使用setTimeout运行相同的方法,直到loaded为真!
答案 1 :(得分:0)
所以问题只是当它是空的时将它打印到控制台,但是在记录之后会更新数组内容。
在初始console.log之后添加此内容以查看:
var that = this;
setTimeout(function() {
console.log("Later...");
console.log(that,that.aImages,that.aImages.length);
});
也许令人困惑的是“这个”它的属性在控制台中存在,所以扩展精灵 - 你看到它是aImages已经满了,但是当你第一次打印时它们是空的。