对象的克隆继承了对第一个对象进行的未来更改

时间:2012-07-31 21:57:46

标签: javascript object javascript-objects

让我们说你有这个对象:

mainObj = {
   foo1: 'bar1',
   foo2: 'bar2',
   foo3: 'bar3'
}

现在我想通过cloneObj = mainOb来结束这个对象。现在我们有两个相同的对象。

当我在之后更改mainObj.foo1 = 'lolcats' 的值时,我因为某种原因而制作了克隆cloneObj.foo1 = 'lolcats'

我在Chrome的控制台上对一个更复杂的对象进行了测试。我确信我的脚本中没有任何内容可以使两个对象保持同步。我甚至通过为cloneObj创建随机名称来确保这一点。

这种行为是故意的还是我遇到某种错误?或者我只是遗漏了一些非常基本的东西?

2 个答案:

答案 0 :(得分:3)

刚刚执行cloneObj = mainOb时没有克隆初始对象,实际上是在传递mainOb的引用,可以通过cloneObj变量名访问。因此,您有两个引用SAME对象的变量名称。

答案 1 :(得分:2)

当您指定/克隆cloneObj = mainOb等对象时,您只需创建对同一对象的另一个引用。因此,mainObcloneOb都指向同一个对象,其中一个的更改会反映在另一个对象上。