Ответ
Плюсы:
- Четкая структура и инкапсуляция логики
- Наследование через
extends(проще, чем прототипы) - Поддержка статических методов и свойств
- Более понятный синтаксис для разработчиков из ООП-языков
Минусы:
- Под капотом все равно работают прототипы (может вводить в заблуждение)
- Нет настоящих приватных полей (до
#-полей нужны костыли) - Поднятие (hoisting) работает иначе, чем у функций
- Сложности с
thisв колбэках (как и в функциях)
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a noise`);
}
}
// Наследование
class Dog extends Animal {
speak() {
super.speak(); // вызов родительского метода
console.log(`${this.name} barks`);
}
}