Get to know MDN better
This page was translated from English by the community. Learn more and join the MDN Web Docs community.
This feature is well established and works across many devices and browser versions. It’s been available across browsers since март 2016 г..
constructor - это специальный метод, служащий для создания и инициализации объектов, созданных с использованием class.
Конструктор позволяет произвести начальную инициализацию, которая должна быть выполнена до того, как остальные методы будут вызваны.
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.
Данный фрагмент кода взят из classes sample (live demo).
Посмотрите на этот отрывок кода.
Здесь прототип Square класса изменён, но в то же время constructor предыдущего базового класса Polygon вызывается при создании нового экземпляра Square.
Если вы не определите метод constructor, будет использован constructor по умолчанию. Для базовых классов, constructor по умолчанию:
Для производных классов, constructor по умолчанию:
| ECMAScript® 2027 Language Specification # sec-static-semantics-constructormethod |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 12 мая 2024 г. by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.