0

当我从现有对象创建一个新对象,然后附加一个新属性时,为什么它会更新较早的属性?

他们的解决方案是否不需要过多更改我的代码?

这是我的示例 jsfiddle

var data = [
  {
    "id" : 1,
    "name" : "carrot",
    "price" : 0.10,
    "stock" : 12,
    "bgLocation" : "-1px -54px"
  },
  {
    "id" : 2,
    "name" : "fennel",
    "price" : 1.20,
    "stock" : 6,
    "bgLocation" : "-146px -52px"    
  }
]

var item = data[0];
item.added = 4;

//data[0] should not contain the added attribute.
$('body').append(JSON.stringify(data[0]));
4

2 回答 2

2

变量itemdata只是指向同一个对象的引用。通过调用。

var item = data[0];

您不是在复制对象,而是在使用data[0]寻址的对象上创建一个新引用。所以

item.added = 4;

将更改机器人变量指向的对象。

这里

如何正确克隆 JavaScript 对象?

是有关如何在 javascript 中复制对象的一些详细信息。

于 2012-09-05T14:18:42.753 回答
0

因为你得到的只是对原始对象的引用,而不是副本。因此,如果您更新此引用,您将隐式更新原始对象。

您可以使用以下命令轻松创建副本$.extend()

var item = $.extend({}, data[0]);

演示

于 2012-09-05T14:20:10.880 回答