Наследование классов JavaScript
Наследование классов JavaScript использует ключевое слово extends.
Наследование позволяет определить класс на основе другого класса, что упрощает создание и поддержку приложения.
super()Метод используется для вызова конструктора родительского класса.
При создании класса не нужно заново переписывать новые элементы данных и функции-члены; достаточно указать, что новый класс наследует члены существующего класса. Этот существующий класс называетсябазовым классом (родительским классом), а новый класс называетсяпроизводным классом (дочерним классом)。
Наследование представляет собой отношение«является». Например, млекопитающее — это животное, собака — это млекопитающее, следовательно, собака — это животное, и так далее.

Код выглядит следующим образом:
В следующем примере создаётся класс "Example", который наследует класс "Site":
Пример
Попробуйте сами »
super()Метод вызывает конструктор родительского класса.
Вызывая метод в конструкторе,super()мы вызываем конструктор родительского класса, что позволяет получить доступ к свойствам и методам родительского класса.
Наследование полезно для повторного использования кода.
В JavaScript нет традиционных классов, как в других языках программирования; он основан на модели прототипного наследования.
ES6 ввёл класс иclassключевое слово, но лежащий в основе механизм по-прежнему основан на прототипном наследовании.
Использование наследования по цепочке прототипов
В следующем примере Animal — это базовый класс, а Dog — подкласс, который наследует от Animal. Dog.prototype использует Object.create(Animal.prototype) для создания нового объекта, который наследует методы и свойства Animal.prototype. При установке Dog.prototype.constructor в Dog гарантируется корректность конструктора в цепочке наследования.
Пример
Использование наследования классов в ES6
ES6 ввёл ключевое слово class, сделав определение классов и наследование более понятными. Ключевое слово extends используется для установления отношения наследования, а ключевое слово super — для вызова конструктора родительского класса в конструкторе подкласса.
Пример
Независимо от того, используете ли вы наследование через цепочку прототипов или наследование классов ES6, можно достичь схожих эффектов наследования. При выборе способа вы можете решить, исходя из личных предпочтений и требований проекта.
Геттеры и сеттеры
В классах мы можем использовать геттеры и сеттеры для получения и установки значений. Геттеры и сеттеры должны выполняться в строгом режиме.
Геттеры и сеттеры делают операции со свойствами очень гибкими
Чтобы добавить геттеры и сеттеры в класс, используйте ключевые слова get и set.
Следующий пример создает геттер и сеттер для свойства sitename:
Пример
Попробуйте сами »
Примечание:Несмотря на то что геттер является методом, не используйте круглые скобки, когда хотите получить значение свойства.
Имена методов getter/setter не могут совпадать с именем свойства; в этом примере свойство называется sitename.
Многие разработчики используют символ подчеркивания перед именем свойства_чтобы отделить getter/setter от самого свойства:
В следующем примере используется символ подчёркивания_для установки свойства и создаются соответствующие методы getter/setter:
Пример
Попробуйте сами »
Чтобы использовать сеттер, используйте тот же синтаксис, что и при установке значения свойства. Хотя set — это метод, его следует указывать безкруглых скобок:
Пример
Попробуйте сами »
Поднятие
Важное различие между объявлениями функций и объявлениями классов заключается в том, что объявления функций поднимаются, а объявления классов — нет.
Сначала нужно объявить класс, а затем обращаться к нему; иначе код наподобие следующего вызовет ReferenceError:
Пример
Использование без объявления вызовет ошибку:

Если он объявлен до использования, он выполняется нормально:
