Коротка відповідь
juniorКлас у ES6 — це синтаксичний сахар над прототипною спадковістю, що забезпечує інкапсуляцію через приватні поля (#field) і методи. Поліморфізм реалізується через перевизначення (override) методів у підкласах, а абстракція досягається через абстрактні класи (або інтерфейси в TS) з методами, що не мають реалізації.
Повне пояснення
Що це і навіщо: Клас у JavaScript (ES6+) дозволяє групувати дані і поведінку в одному об’єкті, що спрощує розробку складних систем. Ключові принципи: приватні поля (наприклад, #id) приховують внутрішній стан; методи класу працюють з цим станом. Поліморфізм: підклас може перевизначити метод базового класу, і виклик через тип базового класу буде виконувати відповідну реалізацію. Абстракція: у TypeScript можна оголосити абстрактний клас з методами без реалізації, що змушує підкласи їх реалізовувати. Практика: у TS абстрактний клас оголошується як abstract class Shape { abstract area(): number; }. У JS можна симулювати абстракцію, кидаючи помилку у конструкторі: if (new.target === Shape) throw new Error('Cannot instantiate abstract class');. Тестування: Jest можна використати для перевірки, що підкласи правильно реалізують абстрактні методи. Оптимізація: використання приватних полів зменшує ризик зовнішнього доступу і підвищує продуктивність через оптимізації V8. Безпека: приватні поля гарантують, що внутрішній стан не буде змінено зовнішнім кодом.