0

我有一个带有数组的复杂 javascript 对象。当我尝试为索引的一个属性设置值时,它会应用于数组的所有项目。

这是一个基本示例:

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 回答