@Iliyaity

Как работает метод доступа к супертипу?

Пытаюсь разобраться с примером. В данном примере перезаписывается метод 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());
  • Вопрос задан
  • 144 просмотра
Пригласить эксперта
Ответы на вопрос 1
RubaXa
@RubaXa
1. Можно было не переопределять метод: jsbin.com/cifanopojo/edit?js,console
2. call/apply — это не «доступ к супертипу», а простое выполнения метода в нужно контексте
3. Если необходим полноценный super, переходите на ES6/Babel.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы