【问题标题】:javascript - object property visible across the inheritance chainjavascript - 在继承链中可见的对象属性
【发布时间】:2016-01-01 09:51:44
【问题描述】:

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

我创造

var Person = new Object;

var billy = Person;
var emily = Person;

然后我将 name 属性分配给 emily

 emily.name = "emily"

当我检查比利和我得到的人的 hasOwnProperty(name) 时,是的。当我检查 billy.name 和 Person.name 时,我得到“emily”。

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

【问题讨论】:

  • 因为你只需创建一个对象和三个指向它的指针(相同)。
  • 这里没有“继承”

标签: javascript oop constructor new-operator


【解决方案1】:

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)

【讨论】:

    【解决方案2】:

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

    var Person = new Object;
    

    这一行创建了一个新对象,并为 Person 分配了对该对象的引用。

    var billy = Person;
    var emily = Person;
    

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

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

    在这种情况下

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多