Menu
Coddy logo textTech

Метод 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;
  }
}

Что здесь происходит:

  1. constructor(name, department) — Менеджеру нужны и имя, и отдел
  2. super(name) — Передает name в конструктор Employee
  1. 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).

challenge icon

Задание

Дан класс Salad, который расширяет Meal. Класс Salad должен иметь как name, так и ingredients.

Ваша задача — завершить конструктор класса Salad следующим образом:

  1. Вызовите super() со свойством name
  2. Установите свойство 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"]
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование