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

Класс против функции-конструктора

Вопрос

Чем класс отличается от функции-конструктора, если под капотом всё равно прототипы?

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

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

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

Коротко

Образцовый ответ: «Модель та же: typeof класса это function, методы лежат в prototype. Но отличий немало.

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

  • Класс нельзя вызвать без `new`, функцию-конструктор можно

  • Тело класса всегда в строгом режиме

  • Объявление класса в TDZ, функция поднимается целиком

  • Методы класса неперечисляемые

  • `extends` и `super` настраивают цепочку и наследование статики, плюс наследование встроенных типов вроде `Array` и `Error`

  • Есть поля, приватные `#`-члены и статические блоки

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

  • Почему в наследнике нельзя использовать this до super()?
  • Как наследоваться от Error и зачем это нужно?
  • Где лежат поля класса: в экземпляре или в прототипе?

Разбор

Образцовый ответ: «Модель та же: typeof класса это function, методы лежат в prototype. Но отличий немало. Класс нельзя вызвать без new, будет TypeError, а старый конструктор при таком вызове молча писал бы поля в глобальный объект. Тело класса всегда строгое. Объявление класса не поднимается так, как функция: до объявления он в временной мёртвой зоне. Методы класса создаются неперечисляемыми, их не видно в for...in. extends делает две связи: прототип экземпляров и прототип самого класса, поэтому наследуется и статика. Через extends корректно наследуются встроенные типы, Error, Array, Map: объект создаёт родительский конструктор, и именно поэтому this в наследнике недоступен до super(). Плюс синтаксис, которого нет у функций: поля экземпляра, которые создаются в каждом объекте, приватные поля с решёткой, геттеры, статические поля и блоки».

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

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