Извините за вопрос о свалке Я новичок в js. Я хотел бы переопределить функцию f2()
в D
«класс». Но почему-то Fire Fox сказал мне: «слишком много рекурсии». Не могли бы вы указать мне, где происходит рекурсия и как заставить этот код работать должным образом?JS Пример наследования: слишком много рекурсии
var B = function() {
};
B.prototype.f2 = function (x) {
return 2 * x;
};
var C = function() {
B.call(this);
};
var D = function() {
C.call(this);
};
D.prototype.f2 = function (x) {
return C.prototype.f2.call(this, x) * 7;
};
inherit(B, C);
inherit(C, D);
function inherit(Child, Parent) {
Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;
}
var d = new D();
console.log(d.f2(3));
Мне интересно, почему вы изучаете ES5 прототип цепи так пристально (основанный на этом и по крайней мере один от на мой вопрос, который я ответил). Функция «inherit» выше устарела. Начиная с ES2015, для этого есть простой, понятный, декларативный синтаксис, и этот синтаксис может быть передан для старых сред, которые еще не поддерживают его. В этом синтаксисе гораздо проще понять. Поэтому изучение этого устаревшего способа сделать это кажется ... неоптимальным. –
* (не мой dv ...) * –
Большое спасибо, ваши ответы очень полезны! Я учился в классическом стиле oop в js, и нас попросили реализовать его двумя способами: ES5 и ES2015. Но я понимаю, что вы говорите, это имеет смысл и делает мир js, о котором я только что знаком, более ясен. –