以下是代码的片段。基本上,'this.leaves'是一个数组。我想转移第一个数组元素,复制它(称为frontLeaf),并将其解除转移到原始数组,从复制元素中更改一些属性,并将该元素放入父数组元素。
var frontLeaf = this.leaves.shift();
this.leaves.unshift(frontLeaf);
frontLeaf.leftChild = tmp;
frontLeaf.rightChild = this;
this.parent.leaves.push(frontLeaf);
我的问题是,当我分配
时,frontLeaf似乎通过引用传递frontLeaf.leftChild = tmp;
frontLeaf.rightChild = this;
以上两行代码似乎影响this.leaves和this.parent.leaves中的两个元素......那么,我该如何解决这个问题呢?
答案 0 :(得分:0)
是的,JavaScript对象总是通过引用传递。如果你想要一个对象的副本,你必须自己编写一个深层复制例程。
我不确定你到底想要做什么(什么是tmp?这是什么?这是什么?提供了一个数组?),但也许有一种方法可以做到这一点而不需要副本?
答案 1 :(得分:0)
Javascript通过引用传递所有对象。做你正在寻找的东西的唯一方法是创建一个全新的对象,做一个深层复制,然后推送它。
有关使用jQuery的示例解决方案,请参阅this post。
答案 2 :(得分:0)
以下是我在遇到同样问题时所做的事情:
var newObj = JSON.parse(JSON.stringify(oldObj));