constructor

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

Синтаксис

constructor([arguments]) { ... }

Описание

В классе может быть только один метод с именем "constructor". Если класс содержит более одного конструктора, будет сгенерировано исключение SyntaxError.

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

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

Примеры

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

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

class Square extends Polygon {
  constructor(length) {
    // Здесь вызывается конструктор родительского класса,
    // в который передается length в качестве аргументов,
    // соответствующим полям width и height класса Polygon
    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 (ECMA-262)
Определение 'Constructor Method' в этой спецификации.
Живой стандарт  

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

Update compatibility data on GitHub
КомпьютерыМобильныеServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome для AndroidFirefox для AndroidOpera для AndroidSafari on iOSSamsung InternetNode.js
constructorChrome Полная поддержка 49
Полная поддержка 49
Нет поддержки 42 — 49
Замечания
Замечания Strict mode is required.
Нет поддержки 42 — 49
Отключено
Отключено From version 42 until version 49 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge Полная поддержка 13Firefox Полная поддержка 45IE Нет поддержки НетOpera Полная поддержка 36
Полная поддержка 36
Нет поддержки 29 — 36
Замечания
Замечания Strict mode is required.
Нет поддержки 29 — 36
Отключено
Отключено From version 29 until version 36 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled).
Safari Полная поддержка 9WebView Android Полная поддержка 49
Полная поддержка 49
Нет поддержки 42 — 49
Замечания
Замечания Strict mode is required.
Chrome Android Полная поддержка 49
Полная поддержка 49
Нет поддержки 42 — 49
Замечания
Замечания Strict mode is required.
Нет поддержки 42 — 49
Отключено
Отключено From version 42 until version 49 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Firefox Android Полная поддержка 45Opera Android Полная поддержка 36
Полная поддержка 36
Нет поддержки 29 — 36
Замечания
Замечания Strict mode is required.
Нет поддержки 29 — 36
Отключено
Отключено From version 29 until version 36 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled).
Safari iOS Полная поддержка 9Samsung Internet Android Полная поддержка 5.0
Полная поддержка 5.0
Нет поддержки 4.0 — 5.0
Замечания
Замечания Strict mode is required.
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.

Легенда

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

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