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

javascript - object property visible across the inheritance chain

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

我创造

var Person = new Object;

var billy = Person;
var emily = Person;

然后我给emily取个名字属性

 emily.name = "emily"

当我检查 billy 和 Person 的 hasOwnProperty(name) 时,我得到的结果是正确的。当我检查 billy.name 和 Person.name 时,我得到 "emily"。

为什么给 emily 一个名字,给每个人都起一个名字 属性 并赋予相同的值?

Person是一个对象

var Person = {}

您向 billyemily 提供了 Person

拥有的对象地址的副本
var billy = Person;

Billy, you watch those properties at this place in memory.

var emily = Person;

Emily, you watch those properties at this place in memory.

在这一部分,两者都在内存中的同一位置观看同一对象。 当此对象更改时(通过 Personbillyemily 访问),然后所有人都会看到相同的修改对象。

var Person = address Ox27382738
var bily = address(Person)
var emily = address(Person)

发生这种情况是因为您有一个对象并且正在创建对该对象的不同引用。

var Person = new Object;

此行创建了一个新对象并将对该对象的引用分配给 Person。

var billy = Person;
var emily = Person;

以上两行只是为之前创建的对象创建新的引用 billy 和 emily。因此,所有三个引用(Person、Billy、Emily)都指向同一个对象。

如果您使用任何引用访问或更改任何字段,结果将是相同的,因为所有引用都指向同一个对象。

在这种情况下

emily.name == billy.name == Person.name