Как работает метод доступа к супертипу? Пытаюсь разобраться с примером. В данном примере перезаписывается метод toString, но вызов rect.toString() не срабатывает. Подскажите пожалуйста, почему ? И как здесь происходит перезапись?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.height + "]";
};
function Square(size) {
Rectangle.call(this, size, size);
}
Square.prototype = Object.create(Rectangle.prototype, {
constructor: {
configurable: true,
enumerable: true,
value: Square,
writable: true
}
});
// Что происходит в данном коде ???
Square.prototype.toString = function() {
var text = Rectangle.prototype.toString.call(this);
return text.replace("Rectangle", "Square");
};
var rect = new Rectangle(5, 10);
var square = new Square(6);
console.log(rect.getArea());
console.log(square.getArea());
console.log(rect.toString());
console.log(square.toString());

21 Авг 2019 в 07:06
179 +1
1
Ответы
1

При вызове rect.toString() действительно не сработает, так как у объекта rect не определено свойство height, а в методе toString для Rectangle используется this.height, которое в данном случае будет undefined.

Перезапись метода toString происходит в следующей строчке кода:

Square.prototype.toString = function() {
var text = Rectangle.prototype.toString.call(this);
return text.replace("Rectangle", "Square");
};

Здесь создается новый метод toString для объекта Square, который сначала вызывает метод toString у прототипа Rectangle для текущего объекта (this) с помощью call(this), затем заменяет возвращаемую строку "Rectangle" на "Square".

Таким образом, вы увидите строку, возвращаемую методом toString для объекта square, в которой будет указано, что это Square, а не Rectangle.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир