Могут ли экземпляры конструктора наследовать члены, которые не определены в сегменте прототипа? - PullRequest
0 голосов
/ 22 февраля 2019

MDN объясняет, что экземпляры конструктора наследуют только члены в свойстве constructor.prototype, но не что-либо вне его.Например, Object.prototype.watch() будет наследоваться его экземпляру, но не Object.keys();.

Если у меня есть конструктор следующим образом:

function Person(name) {
this.name = name;
}

Person.prototype.greeting = function() {
 alert("Hi!");
}

свойство name не находится внутри свойства prototype, а метод приветствия ().Однако, если я создаю экземпляр как таковой:

let person1 = new Person("Foo");

person1 может получить доступ к person1.name, а также person1.greeting() к обоим, даже если свойство name определено вне свойства prototype.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Свойство, а также name и метод greeting доступны для person1 различными способами.

  1. name доступно для person1 благодаря оператору new
  2. greeting доступно для person1 из-за prototype

Когда используется оператор new, он всегда возвращает Object.И объект имеет свои свойства.name является собственностью объекта.

0 голосов
/ 22 февраля 2019

Технически ответ - да: экземпляр может наследовать от свойства объекта-прототипа своего конструктора, а также любые свойства, которые наследует объект-прототип. Это обобщенное значение «цепочки прототипов».

В данном примере, однако, возникает путаница в том, что name наследуется, а не.

Объекты могут иметь локальные или "собственные" свойства в дополнение к наследованию.свойства из их цепи прототипа.Игнорируя более сложное использование методов получения и установки, унаследованные свойства доступны только для чтения: если вы записываете в них записанное значение, оно сохраняется в собственном свойстве, созданном для локального хранения записанного значения, то есть записанное значение затеняет унаследованное значение без его перезаписи.на месте.

Для получения дополнительной информации изучите, как работает наследование JavaScript и, в частности, что делает метод Object.prototype.hasOwnProperty.

...