2017-04-06 67 views
-1

的JavaScript学习的影响 - 请帮助理解,使用Javascript - 分配空对象

在下面的JS代码片段,在添加一个“绰号”属性对象PERSON1,它的人物体反射为好。

但是,当person1设置为空对象{}时,请帮助理解为什么它不影响person对象?


var person = { 
    "firstname" : "Tony", 
    "lastname" : "Stark" 
}; 

var person1 = person; 

person1.nickname = "Ironman"; 

console.log(person); 
//Object { firstname: "Tony", lastname: "Stark", nickname: "Ironman" } 
console.log(person1); 
//Object { firstname: "Tony", lastname: "Stark", nickname: "Ironman" } 

person1 = {}; 

console.log(person); 
//Object { firstname: "Tony", lastname: "Stark", nickname: "Ironman" } 
console.log(person1); 
//Object { } 

在此先感谢!

回答

0

在下面的JS代码片段中,当“昵称”属性添加到对象 person1时,它也反映在Person对象中。

你做person1 = person所以,现在两个变量指向相同的内存地址,所以不同的人会反映在另一个。

但是,当person1设置为空对象{}时,请帮助 了解为什么它不影响person对象?

这样做person1 = {},你分配一个新内存地址,以便personperson1现在是两个不同的实体,并改变一个不会影响其他。

+0

嗨艾米特,谢谢你的时间!能够在上面关于{}分配新的内存地址的解释进行关联,但是,将Person1赋值为null或undefined并不会影响Person对象 - 任何提示为什么? – SAP

+0

@SAP不客气的朋友! :) –

0

Objects基本上在它被分配给另一个变量的时候被引用。所以当你影响存储在一个变量中的一个object时,它也会影响另一个变量,因为它们都共享相同的引用。

而且当您用另一个值替换参考时,旧参考将被切断,并且具有新存储器参考的新object将被存储。