0

配列を持つ複雑なJavaScriptオブジェクトがあります。インデックスの1つの属性に値を設定しようとすると、配列のすべての項目に適用されます。

基本的な例を次に示します。

var obj = new Object();    
obj.arr = [];
obj.arr[0] = {pos:[0,0]};
obj.arr[1] = {pos:[0,0]};

ここで、特定のインデックスを介してオブジェクトの属性に値を設定すると、

obj.arr[0].pos = [10,10];
obj.arr[1].pos = [5,5];

ここで[5,5]は、配列の両方の項目の値を設定しているようです。結果の値は次のとおりです。

console.log(obj.arr[0].pos)戻り[5,5]

console.log(obj.arr[1].pos)また戻ります[5,5]

私の実際のオブジェクトははるかに複雑ですが、これは何が起こっているかについての基本的な考え方です...

何か案は?

4

1 に答える 1

0

それらは同じリンクを共有します。つまり、オブジェクトのいくつかの変数/プロパティが同じ値を参照しています。

正確な答え(エラーはどこにありますか)は、オブジェクトがどのように構成されているかによって異なります。

var nested = {a:1};
var obj = {arr:[]};
obj.arr[0] = {pos:0, n:nested};
obj.arr[1] = {pos:0, n:nested};

obj.arr[0].pos = 1;
obj.arr[1].pos == 1; // false
obj.arr[0].nested.a = 2;
obj.arr[1].nested.a == 2; // true

同じ配列/オブジェクトリテラルの割り当ては同じではありません。

var a = [0];
var b = [0];
b[0] = 1;
a[0] == 1; // false
b = a;
a[0] = 2;
b[0] == 2; // true

a = b = [0];
a[0] = 1;
b[0] == 1; // true
于 2012-04-12T22:22:13.050 に答える