Baseline Widely available
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(...args) {
super(...args);
}
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4