Movatterモバイル変換


[0]ホーム

URL:


  1. Веб-технологии для разработчиков
  2. JavaScript
  3. Справочник по JavaScript
  4. Классы
  5. constructor

This page was translated from English by the community.Learn more and join the MDN Web Docs community.

View in EnglishAlways switch to English

constructor

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨март 2016 г.⁩.

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

Синтаксис

constructor([arguments]) { ... }

Описание

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

class Person {  constructor(name) {    this.name = name;  }  introduce() {    console.log(`Hello, my name is ${this.name}`);  }}const otto = new Person('Отто');otto.introduce();

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

constructor() {}

Если ваш класс является производным классом, конструктор по умолчанию вызывает родительский конструктор, передавая любые аргументы, которые были предоставлены:

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

Это позволяет работать следующему коду:

class ValidationError extends Error {  printCustomerMessage() {    return `Проверка не удалась :-( (подробности: ${this.message})`;  }}try {  throw new ValidationError("Неправильный номер телефона");} catch (error) {   if (error instanceof ValidationError) {    console.log(error.name); // Это Error вместо ValidationError!    console.log(error.printCustomerMessage());  } else {    console.log('Неизвестная ошибка', error);    throw error;  }}

ValidationError классу не нужен явный (explicit) конструктор, потому что не требуется инициализация. Затем, конструктор по умолчанию позаботится об инициализации родительского классаError, переданным ему аргументом.

Однако, если определён ваш собственный конструктор и класс является производным от какого-либо родительского класса, то вы должны явно объявить конструктор родительского класса, используяsuper. К примеру:

class ValidationError extends Error {  constructor(message) {    super(message);  // вызов конструктора родительского класса    this.name = 'ValidationError';    this.code = '42';  }  printCustomerMessage() {     return `Проверка не удалась :-( (подробности: ${this.message}, code: ${this.code})`;  }}try {  throw new ValidationError("Неправильный номер телефона");} catch (error) {   if (error instanceof ValidationError) {    console.log(error.name); // Теперь это ValidationError!    console.log(error.printCustomerMessage());  } else {    console.log('Неизвестная ошибка', error);    throw error;  }}

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

Примеры

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

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

js
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;  }}

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

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

js
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); //falseconsole.log(Object.getPrototypeOf(Square.prototype) === Rectangle.prototype); //truelet newInstance = new Square();console.log(newInstance.name); //Polygon

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

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

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

js
constructor() {}

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

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

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

Specification
ECMAScript® 2026 Language Specification
# sec-static-semantics-constructormethod

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

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

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp