Я бы никогда не стал утверждать, что классы ES6 явно лучший выбор, чем композиция, модули или прототипный объектно-ориентированный объект. Они не. Я фанат чисто прототипного наследования (я даже написал для него библиотеку), мне бы понравилось, если бы семантика классов была основана на нем. Но этого не произошло по законной причине обратной совместимости.
У классов ES6 есть несколько преимуществ:
- Они являются стандартом для единственного наследования. Существует слишком много библиотек наследования, и мы уже видим, что некоторые из них заменяются классами ES6 (в Ext JS, в AngularJS 2, скоро в Ember.js, в некоторой степени в React).
- Связано с предыдущим элементом: они помогают инструментам (таким как IDE и средства проверки типов) статически анализировать исходный код.
- Вы можете создавать подклассы встроенных конструкторов, таких как Error.
- Они совместимы с текущим кодом, в котором используются конструкторы.
Чтобы хорошо выполнять ООП, классы должны быть дополнены трейтами (или миксинами). Я не люблю называть классы ES6 «классическим наследованием», потому что на самом деле это не классы, а просто синтаксический сахар для конструкторов (как вы знаете).
У нас были годы на то, чтобы разработчики пришли к единому подходу к единственному наследованию. К сожалению, этого не произошло. Теперь у нас есть что-то достаточно хорошее, и в настоящее время это лучший выбор для сравнения. широкое распространение.
Следовательно, бремя доказательства лежит на альтернативах: в чем они значительно лучше, чем классы ES6? Черты предоставляют то, чего нет в классах ES6, но они дополняют их, они не являются им альтернативой. В остальном, если вы можете заставить себя игнорировать несоответствие между синтаксисом и семантикой, классы ES6 будут работать нормально.
Классы ES6 - не самый элегантный выбор, но самый прагматичный.