javascript - 在继承链中可见的对象属性

时间:2016-01-01 09:51:44

标签: javascript oop constructor new-operator

这是我发现的一件有趣的事情,但不知道为什么会这样。

我创建

var Person = new Object;

var billy = Person;
var emily = Person;

然后我为emily分配一个名字属性

 emily.name = "emily"

当我在比利和我得到的人上检查hasOwnProperty(名字)时,为真。当我检查billy.name和Person.name时,我得到“emily”。

为什么给emily一个名字,为每个人设置一个name属性并为它赋值相同的值?

2 个答案:

答案 0 :(得分:0)

Person是一个对象

var Person = {}

您为billyemily提供Person拥有的对象地址的副本

var billy = Person;
  

Billy,你在内存中的这个地方看这些属性。

var emily = Person;
  

Emily,你在内存中的这个地方看这些属性。

在这个部分,两个都在内存中的同一个地方观看同一个对象。 当此对象发生更改(Personbillyemily访问)时,所有人都会看到相同的修改对象。

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