Прототипы или Классы?
tl;dr
В JS нет классов, это просто синтаксический сахар.
Отличительная особенность классов - это самостоятельная сущность, которая существует в единственном экземпляре и доступен глобально. В JS "класс" это именованный конструктор + надстройка, которая расширяет прототип и добавляет к инстансу поля с анонимными функциями (то что записывается как static методы). Вы спокойно можете где-то в проекте поменять прототип объекта. Или еще чего.... То есть по сутиclass Foo {
    constructor() {}
}
это полный эквивалентfunction Foo() {
}
и только. Все остальное - сахар над Object.create. То есть как это работает вы знать обязаны, вы должны понимать разницу между объектной моделью в какой-нибудь джаве и javascript.
Как и писали выше, классы  - это всего лишь синтаксический сахар, с некоторыми дополнительными возможностями. По сути, все возможности предоставляемые классами, были доступны и ранее, только в другой форме,  но в любом случаи, плюсов от их использования больше, чем минусов:наглядность и простота - это особенно актуально для программистов, пришедших с ОО языков программированиястандартизация реализации и синтаксиса. Все больше фреймворков, библиотек и даже языков программирование переходят на использование нативного синтаксиса классов и модулей ES2015, например, React, Ember.js или Typescript 
Но добавили многое - это и конструкторы, использование super-методов, статические методы, наследование классов.