0

こんにちは皆さん、質問があります。したがって、基本的に位置などの基本情報を保持するこのクラスSpriteがあります。現在、オブジェクトプロパティがあります

this.pos = {x: 0, y: 0}

それから、Ball クラスであるそれから継承するものもあります。これで、new Ball(px, py) を呼び出すたびに、適切な位置でボールがインスタンス化されますが、その前にインスタンス化されたすべてのボールも同じ位置に移動します。

ボール内のコードは次のとおりです。

this.pos.x = px;
this.pos.y = py;

次のように変更するまで、これが原因であることを知りませんでした。

this.pos = {x: px, y: py};

その場合、それは素晴らしく機能しました。今、私はなぜ後者が機能し、前者が機能しなかったのかについて混乱しています。私にとっては同じことをすべきだったからです。

4

1 に答える 1

0

設定方法では、すべてのオブジェクトが同じ位置オブジェクトを共有しているため、そのオブジェクトを変更するたびに変更されることになります。リテラルを使用して新しいオブジェクトを宣言すると、{}別の新しいオブジェクトが作成されます。このオブジェクトは、他のオブジェクトに影響を与えることなく変更できます。

オブジェクトをクラスと呼んでいるので、Javascript とは異なることを行う言語から来ていると思います。よりクラス的な構造を作成するライブラリもありますが、Javascript で継承がどのように機能するかについて少し読むことをお勧めします。継承とプロトタイプチェーン、およびオブジェクトの作成に関するこれらの MDN 記事が特に役立つはずです!

于 2013-10-28T19:20:43.683 に答える