我正在创建一个脚本,其中我创建了一个对象,我想复制它,但是当我将对象分配给另一个变量时,如果我更改它会同时更改这两个变量。
我一直在读一本书,我的理解是它是一个引用而不是一个值,但我想复制一个对象并从那时起分别对待它们。这是我所做的一个例子:
var myObject = {};
var copyOfMyObject = myObject;
myObject.foo = 'bar';
console.log(myObject, copyOfMyObject);
//logs Object {foo="bar"} Object {foo="bar"}
有没有办法复制整个对象,我可以在不影响其他对象的情况下独立更改它们的属性?
您必须将每个属性映射到新数组:
可以像这样制作简单的一级克隆:
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
里面的对象是一样的。