1

タイトルが、連想配列とその長さの問題についてよく寄せられる質問に非常によく似ていることは承知しています。ただし、ここスタック オーバーフローではまだ問題の解決策が見つかりませんでした。

問題は、.length必要な量ではなく常に 0 を出力することです。このテスト ケースでは 12 になります。出力するconsole.logと、12 エントリが得られ、長さ属性が正しい値で表示されます。firebug の出力を添付しました。

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);12 ではなく常に 0 を呼び出すようになったとき。

どんな助けでも大歓迎です。

フィドルのスクリプト。(コンソールに出力)

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 がコードのどこに表示されるかを確認してください。これは、すべてがロードされていることを知っていた 1 つのフラグです。そして、setTimeout を使用して、loaded が true になるまで同じメソッドを実行するだけです!

于 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);
  });

おそらく、「これ」とそのプロパティがコンソールにライブであるため、スプライトを展開すると、混乱する可能性があります。aImages がいっぱいであることがわかりますが、最初に印刷したときは空でした。

于 2013-04-30T10:25:23.973 に答える