2

我正在创建一个脚本,在其中创建一个对象,并且我想制作它的副本,但是当我将对象分配给另一个变量时,如果我更改它会同时更改两者。

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

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

console.log(myObject, copyOfMyObject);

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

有没有办法复制整个对象,我可以在不影响另一个的情况下独立更改它们的属性?

4

1 回答 1

1

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

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

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

这会将所有属性从 克隆ba。但保留所有其他属性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

于 2013-06-02T18:21:33.303 回答