考虑以下代码:
A={
prop1: 12,
prop2: {x:12}
};
newprop2={k:55,l:3};
A.prop2=newprop2;
newprop2 = {m:65, n:25};
console.log(A);
输出是:
{ prop1: 12, prop2: { k: 55, l: 3 } }
我期望的输出是:
{ prop1: 12, prop2: {m:65, n:25} }
因为对象是通过引用复制的,所以我希望子属性是通过引用复制的,因为我想要指定为值的对象很大并且不想维护多个副本。
最佳答案
是的,对象是通过引用复制的。但在 newprop2 = {m:65, n:25};
行,您将一个新对象分配给 newprop2
。较旧的引用仍分配给 A.prop2
,它引用 newprop2
所引用的旧对象。因此 newprop2 现在引用了另一个对象,该对象与之前引用的对象已经没有任何关系。
简而言之,您更改了 newprop2
的引用。如果您将通过 newprop2
访问属性,而不更改引用,您将改变 A.prop2
引用的同一对象。
const A = {
prop1: 12,
prop2: { x: 12 }
};
let newprop2 = { k:55, l:3 };
A.prop2 = newprop2;
newprop2.k = 65;
newprop2.l = 25;
console.log(A);
关于javascript - 具有对象值的子属性是否通过 JavaScript 中的引用复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47736606/