请考虑以下代码:
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} }
因为对象是通过引用复制的,所以我希望通过引用复制子属性,因为我想要指定为值的对象是大型的,并且不想维护多个副本。
答案 0 :(得分:5)
是的,通过引用复制对象。但是在bitrise run
行,您正在为newprop2 = {m:65, n:25};
分配一个新对象。旧引用仍分配给newprop2
,它引用A.prop2
引用的旧对象。所以newprop2
现在指的是另一个对象,它与之前引用的对象已经没有任何关系。
简明扼要地,您更改了newprop2
的引用。如果您将通过newprop2
访问属性,而不是更改引用,则会改变newprop2
引用的同一对象。
A.prop2
答案 1 :(得分:0)
是的,因为newprop2={k:55,l:3};
引用了它。稍后您更改了newprop2
的引用,但是在转让完成后,prop2 of A
对newprop2
的引用较早。最后A.prop2 !== newprop2
。一旦为prop2
分配了新值,您必须将值设置为属性newprop2
。因此,只需在prop2
新分配后指定prop2
个值。
A={
prop1: 12,
prop2: {x:12}
};
newprop2={k:55,l:3};
newprop2 = {m:65, n:25};
A.prop2=newprop2;
console.log(A);
现在A.prop2 === newprop2
。