OO对象的Javascript副本
这个问题在这里已经有了答案:
在JS中,所有的任务都是按价值完成的。
但是,在对象的情况下,该值是一个参考。
也就是说,如果您使用yellow = blue
, yellow
和blue
将在内存中包含相同的对象。 所以你不能修改另一个。
在第一种情况下:
var blue = {a:1};
var yellow = blue; // yellow references blue...
yellow = 3; // but not anymore. Now it's just a number.
在第二:
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`
当你给一个变量赋值的时候,这个变量以前的任何值都消失了。 你的第一个样本就是这样。
当您将一个变量赋值给一个对象的值,然后修改该对象(将其设置为某个值的属性)时,您仍然拥有指向该对象的变量。 这就是你的第二个样本。
第二个示例中发生的另一件事是, blue
和yellow
指向同一个对象,因此通过blue
修改与通过yellow
修改相同,并且在这两种情况下效果“适用于”两个变量(它始终是同一个对象)