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).
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 |
|---|
| ECMAScript® 2026 Language Specification > # sec-static-semantics-constructormethod > |