如何通过'按值传递'而不是'按引用传递'复制元素

时间:2011-04-18 04:48:07

标签: javascript pass-by-reference

以下是代码的片段。基本上,'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中的两个元素......那么,我该如何解决这个问题呢?

3 个答案:

答案 0 :(得分:0)

是的,JavaScript对象总是通过引用传递。如果你想要一个对象的副本,你必须自己编写一个深层复制例程。

我不确定你到底想要做什么(什么是tmp?这是什么?这是什么?提供了一个数组?),但也许有一种方法可以做到这一点而不需要副本?

答案 1 :(得分:0)

Javascript通过引用传递所有对象。做你正在寻找的东西的唯一方法是创建一个全新的对象,做一个深层复制,然后推送它。

有关使用jQuery的示例解决方案,请参阅this post

答案 2 :(得分:0)

以下是我在遇到同样问题时所做的事情:

var newObj = JSON.parse(JSON.stringify(oldObj));