Ответ вслух Middle Прототипы и классы спрашивают часто обновлено

Прототипное наследование

Вопрос

Как устроено наследование в JavaScript? Что происходит при обращении к свойству?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

У каждого объекта есть скрытая ссылка [[Prototype]]. При чтении свойства движок ищет его на самом объекте, затем у прототипа, затем у прототипа прототипа - до null.

Что должно прозвучать в ответе

  • у каждого объекта есть ссылка на прототип - [[Prototype]]

  • поиск свойства идёт вверх по цепочке до null

  • __proto__ - ссылка на прототип, prototype - свойство функции-конструктора

  • class - синтаксический сахар над этой же схемой

  • Object.create задаёт прототип напрямую

  • изменение прототипа во время работы убивает оптимизации движка

Что могут спросить следом

  • Чем class отличается от функции-конструктора на практике
  • Что делает Object.create(null) и зачем
  • Почему hasOwnProperty, а не просто проверка на undefined

Разбор

У каждого объекта есть скрытая ссылка [[Prototype]]. При чтении свойства движок ищет его на самом объекте, затем у прототипа, затем у прототипа прототипа - до null. Запись всегда идёт в сам объект и «затеняет» прототип.

prototype - это свойство функции: объект, который станет прототипом всех созданных через new экземпляров. __proto__ (правильнее Object.getPrototypeOf) - ссылка у конкретного объекта. class - сахар над тем же механизмом, без новой семантики.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.