Метод super()
Часть раздела Объектно-ориентированное программирование путешествия по JavaScript на Coddy — урок 27 из 56.
Метод super() создает и инициализирует объект, используя конструктор родительского класса. Его необходимо вызвать перед тем, как вы сможете добавить какие-либо свойства в дочерний класс.
Представьте это следующим образом: родительский класс строит фундамент объекта, а super() говорит «сначала построй этот фундамент», прежде чем дочерний класс добавит свои собственные функции.
Давайте рассмотрим пример. Создайте родительский класс:
class Employee {
constructor(name) {
this.name = name;
}
}Теперь создайте дочерний класс, который расширяет родительский:
class Manager extends Employee {
constructor(name, department) {
super(name); // Вызов родительского конструктора с именем
this.department = department;
}
}Что здесь происходит:
constructor(name, department)— Менеджеру нужны и имя, и отделsuper(name)— Передаетnameв конструктор Employee
this.department— устанавливает уникальное свойство Manager
Это создает Manager, который имеет как унаследованные свойства (name), так и свои собственные свойства (department)!
Создайте экземпляр дочернего класса:
const myManager = new Manager("Sarah", "Engineering");
console.log(myManager.name); // "Sarah"
console.log(myManager.department); // "Engineering"Метод super() должен быть вызван перед использованием this в конструкторе производного класса. Если вы не вызовете super(), JavaScript выдаст ошибку ссылки (reference error).
Задание
Дан класс Salad, который расширяет Meal. Класс Salad должен иметь как name, так и ingredients.
Ваша задача — завершить конструктор класса Salad следующим образом:
- Вызовите
super()со свойствомname - Установите свойство
ingredients
Шпаргалка
Метод super() создает и инициализирует объект, используя конструктор родительского класса. Его необходимо вызвать перед тем, как вы сможете добавить какие-либо свойства в дочерний класс.
Пример использования super() в дочернем классе:
class Employee {
constructor(name) {
this.name = name;
}
}
class Manager extends Employee {
constructor(name, department) {
super(name); // Сначала вызываем конструктор родителя
this.department = department; // Затем добавляем свойства дочернего класса
}
}
const myManager = new Manager("Sarah", "Engineering");
console.log(myManager.name); // "Sarah"
console.log(myManager.department); // "Engineering"Ключевые моменты:
super()должен быть вызван перед использованиемthisв конструкторе дочернего класса- Передавайте необходимые аргументы из дочернего конструктора в родительский
- JavaScript выдаст ошибку ссылки (reference error), если
super()не будет вызван
Попробуйте сами
import { Meal } from './classes.js';
import { Salad } from './classes.js';
// Тестовый код — не изменять
const salad = new Salad("Caesar", ["lettuce", "croutons", "cheese"]);
console.log(salad.name); // Должно вывести "Caesar"
console.log(salad.ingredients); // Должно вывести ["lettuce", "croutons", "cheese"]В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Объекты и ключевое слово this
Краткий обзор: ОбъектыДобавление методов в объектыПонимание ключевого слова thisФункции-конструкторыКлючевое слово newИтоговое испытание7Наследование и ключевое слово extends
НаследованиеОтношение «is-a»Ключевое слово extendsМетод super()Наследование свойств и методовИтоговое испытание10Полиморфизм
Что такое полиморфизм?Переопределение унаследованных методовИспользование superИтоговое задание13Композиция против наследования
Отношения «has-a» и «is-a»Ограничения глубокого наследованияСоздание объектов2Организация кода
Что такое модули?Экспорт с помощью exportИмпорт с помощью importDefault против именованных экспортов5Инкапсуляция и доступ
ИнкапсуляцияПубличные и приватные поля классовПриватные методыЗадание на повторение8Организация кода ООП
Организация классов в модули11Проект: Отрисовщик фигур
Настройка: Класс Shape и экспортНаследование класса Circle14Система управления библиотекой
Проектирование библиотекиКласс Book с использованием композиции6Проект: Простой банковский счет
Класс BankAccountПополнение и снятие средств9Статические методы и свойства
Уровень класса против уровня экземпляраСтатические свойстваСтатические вспомогательные методыЗадание на закрепление