Как работает метод доступа к супертипу? Пытаюсь разобраться с примером. В данном примере перезаписывается метод 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
156 +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 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 436 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир