extends

Ключевое слово extends используется в  объявлении класса или в  выражениях класса для создания дочернего класса.

Синтаксис

class ChildClass extends ParentClass { ... }

Описание

Ключевое слово extends может быть использовано для создания дочернего класса для уже существующего класса или встроенного объекта.

Свойство .prototype родительского класса или объекта должно быть Object или null.

Примеры

Использование extends

В первом примере создаётся дочерний класс с именем Square от класса с именем Polygon. Этот пример был взят из live demo (source).

class Square extends Polygon {
  constructor(length) {
    // Здесь вызывается конструктор родительского класса с length, 
    // которые передаются полям width и height класса Polygon
    super(length, length);
    // Примечание: В производных классах, метод super() должен быть вызван перед тем
    // как вы сможете использовать 'this'. Если не учесть этого, то произойдёт ошибка.
    this.name = 'Square';
  }

  get area() {
    return this.height * this.width;
  }

  set area(value) {
    this.height = this.width = Math.sqrt(value);
    this.area = value;
  } 
}

Расширение встроенных объектов

В этом примере класс myDate расширяет (наследует) встроенный объект Date. Этот пример был взят из live demo (source).

class myDate extends Date {
  constructor() {
    super();
  }

  getFormattedDate() {
    var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    return this.getDate() + '-' + months[this.getMonth()] + '-' + this.getFullYear();
  }
}

Расширение null

Расширение от null работает словно вы расширяете обычный класс, за исключением того, что prototype объекта не наследует Object.prototype.

class nullExtends extends null {
  constructor() {}
}

Object.getPrototypeOf(nullExtends); // Function.prototype
Object.getPrototypeOf(nullExtends.prototype) // null

Спецификация

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'extends' в этой спецификации.
Стандарт Initial definition.
ECMAScript Latest Draft (ECMA-262)
Определение 'extends' в этой спецификации.
Черновик  

Совместимость с браузерами

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 42.0 45 (45) ? ? ?
Array subclassing 43.0 Нет ? ? ?
Feature Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support Нет 45.0 (45) ? ? ? 42.0
Array subclassing Нет Нет ? ? ? 43.0

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

Метки документа и участники

 Внесли вклад в эту страницу: Halkyon, Kozhemyak, slayermass
 Обновлялась последний раз: Halkyon,