1

我知道标题听起来很熟悉关于关联数组及其长度问题的常见问题。但是,我还没有在 Stack Overflow 上找到解决我的问题的方法。

问题是,.length总是输出 0 而不是想要的数量,在这个测试用例中是 12。当我通过输出它时,console.log我得到 12 个条目,我可以看到具有正确值的长度属性。我附上了我的萤火虫输出:

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 时。

任何帮助,将不胜感激。

小提琴上的脚本。(控制台输出)

http://jsfiddle.net/EL2xR/

4

2 回答 2

2

当您说this.img.onload时,您将其设为异步,您的 init 会运行,但随后会立即在 getImages 方法之后运行,该方法会及时发现 aImages 为空。您应该考虑在运行 getImages 之前检查是否已加载所有图像以获得正确的结果。

这是一个有效的修改示例。如果需要,您可以对其进行更多调整! http://jsfiddle.net/EL2xR/1/

 interval = setTimeout(function() {
                _this.getImages(from, to);
            }, 1000);

检查 this.loaded 在代码中出现的位置,我曾经知道所有内容都已加载的那个标志!然后使用 setTimeout 运行相同的方法,直到加载为真!

于 2013-04-30T10:46:39.993 回答
0

啊——我明白你的意思了。

所以问题只是当它为空时你正在将它打印到控制台,但是在你记录它之后数组内容会更新。

在您的初始 console.log 之后添加它以查看:

  var that = this;
  setTimeout(function() {
       console.log("Later...");
       console.log(that,that.aImages,that.aImages.length);
  });

也许让您感到困惑的是“this”及其属性在控制台中存在,因此扩展精灵 - 您会看到它的 aImages 已满,但当您第一次打印它们时它们是空的。

于 2013-04-30T10:25:23.973 回答