1
this.draw = function() {
    console.log(this.buttonList.length);
    for(a = 0; a < this.buttonList.length; a++) {
        console.log(this.buttonList.length, a);
        this.buttonList[a].draw();
    }
};

したがって、オブジェクト内にこの関数があり、期待どおりに機能していません。上記のconsole.logステートメントで実行すると、コンソールに次のように記録されます。

2
2 0

これは、私の for ループが配列のすべての項目をループしていないことを示しているようです。私は、なぜそうなるのかについて頭を悩ませてきました。a = 0 に対してのみアクションを実行する理由を知っている人はいますか?

編集:これが違いを生むかどうかはわかりませんが、この関数は毎秒約60回呼び出されます。

4

2 に答える 2

0

この動作には、少なくとも 3 つの可能性があります。

  1. a上書きされます(dystroys回答による)。
  2. のすべての要素には機能buttonListがありませんdraw
  3. thisの関数定義でdrawは、 の要素buttonListです。

最初の 2 つの可能性は簡単に修正できますが、3 番目の可能性は、あなたの意図、つまり何を達成したいかによって異なります。それを修正するには、より多くの情報が必要です。

3 つの可能性 (または可能性の組み合わせ) のいずれかが、動作の原因となる可能性があります。

最初の可能性は によって説明されdystroyます。

要素に機能がない場合、2 つ目の可能性は実行を停止しdrawます。この場合、それは最初の要素のようです。

3 番目の可能性は、無限再帰によるスタック オーバーフローでレンダリングされます。関数は、コンソールにdrawログを記録するだけで何度も呼び出され、すべてのスタックが消費されるまで実行が停止します。22 0

于 2013-05-30T20:29:48.003 に答える