如果我有两种类型的对象:
object1 : {
value : { foo1: {}, foo2: 5 }, state: true, etc = {}
}
并且
object2 : {
value : { foo1: { value: 5}, foo2: 6 }, state: true, etc = {}
}
如果我object1=object2
在所有级别上对object1发生了什么,请
答案 0 :(得分:2)
我将简化一下:
var a = { value: 1, aStuff: true };
var b = { value: 2, bStuff: true };
b = a;
console.log(b); // { value: 1, aStuff: true }
现在a
和b
引用相同的对象。可以想象它可以通过两个名称访问同一个对象。这意味着当您更改该对象时会发生这种情况:
a.value = 5
console.log(a); // { value: 5, aStuff: true }
两个名字,一个对象。
那么{ value: 2, bStuff: true }
对象发生了什么?一旦你告诉b
引用另一个对象,那么现有的变量都没有对它的引用,所以最终垃圾收集器会找到并处理它。
内部物体会发生什么?这就是问题..
什么都没有。外部对象仍然保存引用它包含的值。所有改变的是你有两个指向同一个外部对象的变量。
答案 1 :(得分:2)
object1
现在是object2
的引用,object1
中的任何更改都会更改object2
;
var object1 = { foo: 'bar' };
var object2 = {
value : { foo1: { value: 5}, foo2: 6 }
};
object1 = object2; // the { foo: 'bar' } is gone.
object1.foo2 = 7; //This changes object2.foo2 value
console.log(object2.foo2); //7