Spec-Zone.ru › JavaScript

SyntaxError: super() допустим только в конструкторах производных классов

Исключение JavaScript "super() is only valid in derived class constructors" возникает, когда вызов super() используется где-либо, кроме тела конструктора в классе с ключевым словом extends.

Сообщение

SyntaxError: 'super' keyword unexpected here (V8-based)
SyntaxError: super() is only valid in derived class constructors (Firefox)
SyntaxError: super is not valid in this context. (Safari)

Тип ошибки

SyntaxError

Что пошло не так?

Вызов super() используется для вызова базового конструктора производного класса, чтобы базовый класс мог инициализировать объект this. Использование его где-либо еще не имеет смысла.

super() также может быть определен в стрелочной функции, которая вложена в конструктор. Однако его нельзя определить ни в каком другом типе функции.

Примеры

Недопустимые случаи

Вы не можете вызвать super(), если у класса нет extends, потому что нет базового класса для вызова:

class Base {
  constructor() {
    super();
  }
}

Вы не можете вызвать super() в методе класса, даже если этот метод вызывается из конструктора:

class Base {}

class Derived extends Base {
  constructor() {
    this.init();
  }

  init() {
    super();
  }
}

Вы не можете вызвать super() в функции, даже если эта функция используется как конструктор:

function Base(x) {
  this.x = x;
}

function Derived() {
  super(1);
}

Object.setPrototypeOf(Derived.prototype, Base.prototype);
Object.setPrototypeOf(Derived, Base);

Допустимые случаи

Вы можете вызвать super() перед вызовом любого другого метода в конструкторе:

class Base {}

class Derived extends Base {
  constructor() {
    super();
    this.init();
  }

  init() {
    // …
  }
}

Вы можете вызвать super() в стрелочной функции, которая вложена в конструктор:

class Base {}

class Derived extends Base {
  constructor() {
    const init = () => {
      super();
    };

    init();
  }
}

Смотрите также

  • Классы
  • super

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Bad_super_call

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API