我正在制作一个脚本,我在其中创建一个对象,我想复制它,但是当我将对象分配给另一个变量时,如果我改变它将改变它们。
我一直在读一本书,我理解的是这是一个参考,而不是一个值,但我想复制一个对象,并从那一点单独处理它们。这是我做的一个例子:
var myObject = {};
var copyOfMyObject = myObject;
myObject.foo = 'bar';
console.log(myObject, copyOfMyObject);
//logs Object {foo="bar"} Object {foo="bar"}
有没有办法复制整个对象,我可以独立更改其属性而不影响另一个?
答案 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
内的对象相同。