ES6 классы — это синтаксический сахар над существующей моделью прототипного наследования JavaScript. Они не вводят новую объектно-ориентированную систему — они просто предоставляют более чистый и понятный синтаксис для работы с прототипами.
class — определяет новый классconstructor — инициализирует свойства экземпляра при создании объектаextends — создаёт подкласс, наследующий от родительского классаsuper — вызывает конструктор или методы родительского классаclass Animal {
constructor(name) {
this.name = name;
}
speak() {
return `${this.name} makes a sound.`;
}
}
class Dog extends Animal {
speak() {
return `${this.name} barks.`;
}
}
Под капотом ES6 классы по-прежнему используют прототипное наследование. Когда ты определяешь метод внутри класса, он добавляется в prototype функции-конструктора — ровно так же, как в коде до ES6.
Dog.prototype наследует от Animal.prototypetypeof Dog возвращает "function", что подтверждает, что классы внутри — это функции-конструкторыES6 классы улучшают читаемость кода и снижают количество шаблонного кода, делая JavaScript более доступным для разработчиков, знакомых с классическими OOP языками. Однако понимание лежащей в основе прототипной модели необходимо для отладки проблем с наследованием и написания эффективного JavaScript.
ES6 классы вводят принципиально другую объектно-ориентированную систему по сравнению с прототипной моделью наследования JavaScript.
Новый — ещё не проверен сообществом
Вы