创建新对象时为什么要更新旧对象?

时间:2012-09-05 14:13:25

标签: javascript object scoping

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

他们的解决方案是否不涉及更改我的代码?

Here is my example 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]));

2 个答案:

答案 0 :(得分:2)

变量 item data 只是指向同一对象的引用。通过电话。

var item = data[0];

您没有复制对象,只需在使用 data [0] 处理的对象上创建新引用。因此

item.added = 4;

将更改对象bot vraiables指向。

下面

How do I correctly clone a JavaScript object?

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

答案 1 :(得分:0)

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

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

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

<强> DEMO