Что такое ООП
Что проверяют
Знаете ли вы четыре принципа и умеете ли показать, как они выглядят именно в JavaScript, где классов в привычном смысле нет. У фронтендера вопрос почти всегда продолжается в сторону прототипов и в сторону того, зачем ООП там, где интерфейс собран из функциональных компонентов.
Как отвечать
Начните с определения: ООП это способ организовать программу вокруг объектов, которые держат состояние и поведение вместе. Дальше четыре принципа, каждый одной фразой и примером из фронтенда.
Инкапсуляция: внутреннее состояние закрыто, наружу торчит узкий интерфейс. В JavaScript настоящая приватность появилась с полями через решётку, до этого её изображали замыканием или подчёркиванием в имени.
Наследование: класс берёт поведение родителя. В JavaScript это прототипная цепочка, а class поверх неё синтаксический сахар: extends связывает прототипы, super зовёт родительский конструктор.
Полиморфизм: один вызов, разные реализации. Язык динамический, поэтому достаточно совпадения по имени метода, а интерфейсы из TypeScript живут только до компиляции.
Абстракция: наружу выносится модель задачи, а не устройство. Абстрактных классов в языке нет, их изображают базовым классом с методом, который бросает ошибку, либо типом в TypeScript.
Полезно добавить, где это живёт сейчас: слой данных, клиенты API, стор, обёртки над картами и редакторами. В самом интерфейсе фронтенд ушёл к композиции и хукам.
Где спотыкаются
Пересказывают учебник по Java и не могут сказать, что происходит в JavaScript. Вопрос про прототип и про то, как new связывает объект с прототипом, идёт следом почти всегда.
Считают наследование главным инструментом переиспользования. Глубокая иерархия ломается на первом исключении из правила, поэтому практика советует композицию, а наследование оставлять для узких случаев.
Называют подчёркивание в имени свойства инкапсуляцией. Это соглашение, а не защита: свойство читается и меняется снаружи, и любой сериализатор утащит его в JSON.