constructor - специальный метод, служащий для создания и инициализации объектов, созданных с использованием class.

Синтаксис

constructor([arguments]) { ... }

Описание

Им может быть только один специальный метод, с названием "constructor", находящийся в классе. Если класс содержит более одного конструктора, будет возбуждено исключение SyntaxError.

В конструкторе может быть использовано ключевое слово super, чтобы вызвать конструктор родительского класса.

Если метод constructor не будет задан вами, то будет использован метод constructor, который заложен в js по умолчанию.

Примеры

Использование метода constructor

Данный фрагмент кода взят из classes sample (live demo).

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

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

  set area(value) {
    this.area = value;
  } 
}

Другой пример

Посмотрите на этот отрывок кода.

class Polygon {
  constructor() {
    this.name = "Polygon";
  }
}

class Square extends Polygon {
  constructor() {
    super();
  }
}

class Rectangle {}

Object.setPrototypeOf(Square.prototype, Rectangle.prototype);

console.log(Object.getPrototypeOf(Square.prototype) === Polygon.prototype); //false
console.log(Object.getPrototypeOf(Square.prototype) === Rectangle.prototype); //true

let newInstance = new Square();
console.log(newInstance.name); //Polygon

Здесь прототип Square класса изменен, но в то же время constructor предыдущего базового класса Polygon вызывается при создании нового экземпляра Square.

Constructors по умолчанию.

Если вы не обозначите метод constructor, будет использован constructor по умолчанию. Для базовых классов, constructor по умолчанию:

constructor() {}

Для производных классов, constructor по умолчанию:

constructor(...args) {
  super(...args);
}

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

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

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

Update compatibility data on GitHub
КомпьютерыМобильныеServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome для AndroidEdge MobileFirefox для AndroidOpera для AndroidiOS SafariSamsung InternetNode.js
Базовая поддержкаChrome Полная поддержка 49
Замечания
Полная поддержка 49
Замечания
Замечания From Chrome 42 to 48 strict mode is required. Non-strict mode support can be enabled using the flag "Enable Experimental JavaScript".
Edge Полная поддержка 13Firefox Полная поддержка 45IE Нет поддержки НетOpera Полная поддержка 36Safari Полная поддержка 9WebView Android ? Chrome Android Полная поддержка ДаEdge Mobile Полная поддержка 13Firefox Android Полная поддержка 45Opera Android ? Safari iOS Полная поддержка 9Samsung Internet Android Полная поддержка Даnodejs Полная поддержка 6.0.0
Полная поддержка 6.0.0
Полная поддержка 4.0.0
Отключено
Отключено From version 4.0.0: this feature is behind the --use_strict runtime flag.
Полная поддержка 5.0.0
Отключено
Отключено From version 5.0.0: this feature is behind the --harmony runtime flag.

Легенда

Полная поддержка  
Полная поддержка
Нет поддержки  
Нет поддержки
Совместимость неизвестна  
Совместимость неизвестна
Смотрите замечания реализации.
Смотрите замечания реализации.
Пользователь должен сам включить эту возможность.
Пользователь должен сам включить эту возможность.

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

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

Внесли вклад в эту страницу: Bobsans, Paul_Yuhnovich, galynag, dood
Обновлялась последний раз: Bobsans,