質問を曖昧に表現することはできませんでしたが、理解していただけると思います...
私は Javascript でゲーム エンジンを開発していScene
ます。多くのもののコンテナーであるオブジェクトには、その中の 1 つの配列、特に描画できるすべてのものを保持する配列を変更するメソッドがあります。
この配列には、次のようにアクセスします。
scene.internals.draw
問題は、メソッド内で何度も参照されており、名前/パスが変更される可能性があることです。当然、配列のパスを変更するたびに、メソッド内のすべての参照を変更したくないので、次のようにしました。
var location = scene.internals.draw;
これで、実際のメソッド コードとアルゴリズムはそのまま維持できます。シーン内の配列の名前/パスが変更された場合でも、その 1 行を変更するだけで済みます。
そして、それはほとんどの場合、かなりうまく機能します。などはできます.push(obj)
が、ある時点で、配列を「分割」する必要があります。つまり、次のように、配列を半分に分割し、何かを追加してから、元に戻す必要があります。
buff1 = location.slice(0, i); //First slice of the array.
buff2 = location.slice(i, location.length); //Second slice of the array.
//Add something in between those slices.
buff1.push(ob);
location = buff1.concat(buff2); //Problems here!
これは、配列を直接変更したため、location
ただの場合にうまく機能しました。scene.internals.draw
しかし今、新しい値を目的のlocation
変数ではなく、ローカル変数に割り当てますscene.internals.draw
!
質問: = 演算子を使用して、これらのオブジェクトへの参照を含む変数 ( など) の代わりに、「実際の」オブジェクトに値を割り当てるにはどうすればよいlocation
ですか?
明らかな解決策は、メソッドの最後にある次のとおりです。
scene.internals.draw = location.slice();
これは問題ありません。唯一の副作用は、元の名前を 2 回書き、2 回編集する必要があることですが、これはそれほど大きな問題ではありません。しかし、私はその機能が必要な他の状況にいるかもしれないので、まだ答えが欲しい.