@Iliyaity

Как работает конструктор наследования?

Наткнулся на пример наследования через конструктор. И никак не могу понять, для чего нужна данная строка Square.prototype.constructor = Square; По заверению автора, она просто необходима.
Поясните пожалуйста, зачем здесь перезаписывается constructor прототипа Square?
Код замечательно работает и без этого фрагмента.

function Rectangle(length, width) {
this.length = length;
this.width = width;
}
Rectangle.prototype.getArea = function() {
return this.length * this.width;
};
Rectangle.prototype.toString = function() {
return "[Rectangle " + this.length + "x" + this.width + "]";
};
// inherits from Rectangle
v function Square(size) {
this.length = size;
this.width = size;
}
Square.prototype = new Rectangle();
Square.prototype.constructor = Square;
Square.prototype.toString = function() {
return "[Square " + this.length + "x" + this.width + "]";
};
var rect = new Rectangle(5, 10);
var square = new Square(6);
  • Вопрос задан
  • 326 просмотров
Решения вопроса 1
In4in
@In4in
°•× JavaScript Developer ^_^ ו°
В prototype по умолчанию всегда находится свойство constructor, указывающее на функцию-конструктор.


function Rabbit(){}
console.log( Rabbit.prototype.constructor ); //Rabbit


Автор кода выше переопределяет prototype целиком:
Square.prototype = new Rectangle();
console.log( Square.prototype.constructor ) // Rectangle


Собственно, далее он присваивает constructor'у правильное значение (Square).

Делается это не для работоспособности кода, а во избежание ошибок в дальнейшем, ведь обращаясь к constructor мы ожидаем получить ссылку на функцию-конструктор объекта, а ни как не его прототипа.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
26 нояб. 2024, в 13:05
450 руб./в час
26 нояб. 2024, в 12:58
30000 руб./за проект
26 нояб. 2024, в 12:56
1500 руб./в час