--- title: constructor slug: Web/JavaScript/Reference/Classes/constructor tags: - Класове - Конструктор translation_of: Web/JavaScript/Reference/Classes/constructor ---
Методът constructor е специален метод за създаване и инициализиране на обект , създаден в рамките класът (class).
Източникът на този интерактивен пример се съхранява в хранилище на GitHub. Ако искате да допринесете за проекта за интерактивни примери, моля клонирайте https://github.com/mdn/interactive-examples и ни изпратете заявка за изтегляне.
constructor([arguments]) { ... }
Може да има само един специален метод с име "constructor" в даден клас (class). Ако има повече от един метод с името constructor в класът си , ще се появи грешка {{jsxref("SyntaxError")}}.
Конструктора (constructor) може да използва ключовата дума super за да извика конструктора на родителския клас.
Ако не посочите метода конструктор, ще се използва конструктор по подразбиране
constructorТози примерен код е взет от classes sample (демо на живо).
class Square extends Polygon {
constructor(length) {
// Here, it calls the parent class' constructor with lengths
// provided for the Polygon's width and height
super(length, length);
// Note: In derived classes, super() must be called before you
// can use 'this'. Leaving this out will cause a 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 се променя, но все пак конструктора на предишния базов клас Polygon се извиква, когато се създава нова инстанция(екземлпяр) от класът Square. Това е така , защото в класът Squre използваме ключовата дума super, извиквайки конструктора на родителският клас Polygon .
Както е посочено,ако не посочите метод конструктор, ще се използва конструктор по подразбиране . За базовите класове , конструктора по подразбиране е :
constructor() {}
За производни класове, конструктора по подразбиране е :
constructor(...args) {
super(...args);
}
| Specification | Status | Comment |
|---|---|---|
| {{SpecName('ES2015', '#sec-static-semantics-constructormethod', 'Constructor Method')}} | {{Spec2('ES2015')}} | Initial definition. |
| {{SpecName('ESDraft', '#sec-static-semantics-constructormethod', 'Constructor Method')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.classes.constructor")}}