是否在Javascript中通过引用复制了具有对象值的子属性?

时间:2017-12-10 06:51:44

标签: javascript node.js

请考虑以下代码:

 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} }

因为对象是通过引用复制的,所以我希望通过引用复制子属性,因为我想要指定为值的对象是大型的,并且不想维护多个副本。

2 个答案:

答案 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 Anewprop2的引用较早。最后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