MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/d6d7ff2e2f9c

Ключевое слово 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;
  }
}

Расширение встроенных объектов с помощью extends

Этом пример расширяет встроенный объект 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 работает как и с обычным классом, за исключением того, что прототип объекта не наследует Object.prototype.

class nullExtends extends null {
  constructor() {}
}

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

new nullExtends(); //ReferenceError: this is not defined

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

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

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

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

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