Прототипное наследование
Вопрос
Как устроено наследование в JavaScript? Что происходит при обращении к свойству?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
у каждого объекта есть ссылка на прототип - [[Prototype]]
поиск свойства идёт вверх по цепочке до null
__proto__ - ссылка на прототип, prototype - свойство функции-конструктора
class - синтаксический сахар над этой же схемой
Object.create задаёт прототип напрямую
изменение прототипа во время работы убивает оптимизации движка
Что могут спросить следом
- Чем class отличается от функции-конструктора на практике
- Что делает Object.create(null) и зачем
- Почему hasOwnProperty, а не просто проверка на undefined
Разбор
У каждого объекта есть скрытая ссылка [[Prototype]]. При чтении свойства движок
ищет его на самом объекте, затем у прототипа, затем у прототипа прототипа - до null.
Запись всегда идёт в сам объект и «затеняет» прототип.
prototype - это свойство функции: объект, который станет прототипом всех созданных
через new экземпляров. __proto__ (правильнее Object.getPrototypeOf) - ссылка
у конкретного объекта. class - сахар над тем же механизмом, без новой семантики.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.