OO Javascript副本的对象

OO Javascript copy of object

本问题已经有最佳答案,请猛点这里访问。

我有一个关于javascript如何使用以下示例代码复制对象的问题:

1
2
3
var blue = {a:1};
var yellow = blue
yellow = 3;

在这种情况下,蓝色的值不会作为a=1的对象受到影响。但是,当这样写的时候:

1
2
3
4
var blue = {a:1};
blue.b = 2;
var yellow = blue
yellow.c = 3;`

在这种情况下,console.log(蓝色)将显示蓝色,它的对象中还有一个额外的c:3。当yellow = blue应该只是黄色引用蓝色,而不是相反时,可变蓝色如何受到黄色的影响?


当为变量赋值时,该变量以前拥有的任何值都将消失。这就是你的第一个样本。

当您将一个变量赋给一个对象的值,然后修改该对象(将其属性设置为某个值)时,仍然有该变量指向该对象。你的第二个样本就是这样。

在第二个样本中发生的另一件事是,blue&yellow指向同一对象,因此通过blue修改与通过yellow修改相同,并且在这两种情况下,效果"适用"于两个变量(始终是同一对象)。


在第一种情况下:

1
2
3
4
var blue = {a:1};
var yellow = blue;   // yellow references blue...

yellow = 3;          // but not anymore. Now it's just a number.

在第二个方面:

1
2
3
4
5
var blue = {a:1};
blue.b = 2;

var yellow = blue    // yellow references blue
yellow.c = 3;        // and still does, so yellow.c and blue.c are the same`


在JS中,所有分配都是按值完成的。

但是,对于对象,该值是一个引用。

也就是说,如果使用yellow = blueyellowblue都将在内存中包含相同的对象。所以你不能不修改另一个就改变它。