【问题标题】:Clone of an object inherits future changes that are made to first object对象的克隆继承对第一个对象所做的未来更改
【发布时间】:2012-07-31 21:57:45
【问题描述】:

假设你有这个对象:

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

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

当我更改mainObj.foo1 = 'lolcats' 的值之后我做了克隆然后出于某种原因cloneObj.foo1 = 'lolcats'

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

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

【问题讨论】:

    标签: javascript object javascript-objects


    【解决方案1】:

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

    【讨论】:

    • 好吧...哈哈。猜猜我在这里遗漏了一些基本的东西。 :)
    【解决方案2】:

    当您分配/克隆对象(例如cloneObj = mainOb)时,您只需创建对同一对象的另一个引用。 mainObcloneOb 都指向同一个对象,因此一个对象的变化会反映在另一个对象上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      相关资源
      最近更新 更多