如何在JavaScript中复制对象?

时间:2013-06-02 18:20:22

标签: javascript

我正在制作一个脚本,我在其中创建一个对象,我想复制它,但是当我将对象分配给另一个变量时,如果我改变它将改变它们。

我一直在读一本书,我理解的是这是一个参考,而不是一个值,但我想复制一个对象,并从那一点单独处理它们。这是我做的一个例子:

var myObject = {};
var copyOfMyObject = myObject;
myObject.foo = 'bar';

console.log(myObject, copyOfMyObject);

//logs Object {foo="bar"} Object {foo="bar"}

有没有办法复制整个对象,我可以独立更改其属性而不影响另一个?

1 个答案:

答案 0 :(得分:1)

您必须将每个属性映射到新数组:

简单的一级克隆可以像这样制作:

function clone(a, b) {
    var prop;
    for( prop in b ) {
        b[prop] = a;
    }
}

这会将所有属性从b克隆到a。但请保留a中的所有其他属性:

var a = {a: 9, c: 1},
    b = {a: 1, b: 1};

copy(a, b); // {a: 1, b: 1, c: 1}

深度克隆对象:

上面的例子在处理单级对象时会起作用,但是当存在乘法级别时会产生混淆,请看一下这个例子:

var a = {},
    b = { a: { a: 1 } }

clone(a, b);

a.a.a = 2; 
console.log(a); // { a: { a: 2 } }
console.log(b); // { a: { a: 2 } }

以上示例证明a.a内的对象与b.a内的对象相同。