这是我发现的一件有趣的事情,但不知道为什么会这样。
我创建
var Person = new Object;
var billy = Person;
var emily = Person;
然后我为emily分配一个名字属性
emily.name = "emily"
当我在比利和我得到的人上检查hasOwnProperty(名字)时,为真。当我检查billy.name和Person.name时,我得到“emily”。
为什么给emily一个名字,为每个人设置一个name属性并为它赋值相同的值?
答案 0 :(得分:0)
Person
是一个对象
var Person = {}
您为billy
和emily
提供Person
拥有的对象地址的副本
var billy = Person;
Billy
,你在内存中的这个地方看这些属性。
var emily = Person;
Emily
,你在内存中的这个地方看这些属性。
在这个部分,两个都在内存中的同一个地方观看同一个对象。
当此对象发生更改(Person
,billy
或emily
访问)时,所有人都会看到相同的修改对象。
var Person = address Ox27382738
var bily = address(Person)
var emily = address(Person)
答案 1 :(得分:0)
这种情况正在发生,因为您有一个对象,并且正在创建对该对象的不同引用。
var Person = new Object;
此行创建一个新对象,并为Person分配对该Object的引用。
var billy = Person;
var emily = Person;
以上两行只是为之前创建的Object创建了billy和emily的新引用。所以,所有三个引用(Person,Billy,Emily)都指向同一个对象。
如果使用任何引用访问或更改任何字段,结果将是相同的,因为所有引用都指向同一个对象。
在这种情况下
emily.name == billy.name == Person.name