Javascript JS继承示例:递归太多

Javascript JS继承示例:递归太多,javascript,oop,inheritance,recursion,overriding,Javascript,Oop,Inheritance,Recursion,Overriding,对不起,我是js的新手。我想重写D类中的f2函数。但出于某种原因,FireFox告诉我:递归太多了。你能告诉我递归发生在哪里,以及如何使这段代码按预期工作吗 var B = function () { }; B.prototype.f2 = function (x) { return 2 * x; }; var C = function () { B.call(this); }; var D = function () { C.call(this); }; D.pr

对不起,我是js的新手。我想重写D类中的f2函数。但出于某种原因,FireFox告诉我:递归太多了。你能告诉我递归发生在哪里,以及如何使这段代码按预期工作吗

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));
两个问题:

在尝试向XYZ.prototype对象添加特性之前,需要先设置这些对象。由于继承函数创建了它们,因此必须确保按照正确的顺序进行操作

在继承调用中,父级和子级的顺序是向后的。这是inheritchild,parent,而不是inheritparent,child

var B=函数{ }; B.prototype.f2=函数x{ 返回2*x; }; var C=函数{ B.这是什么; }; 继承c,B;//***移动和更新 var D=函数{ C.这是什么; }; 继承的,C;//**移动和更新 D.prototype.f2=函数x{ 返回C.prototype.f2.callthis,x*7; }; 函数继承子函数、父函数{ Child.prototype=Object.createParent.prototype; Child.prototype.constructor=Child; } var d=新的d; console.logd.f23 两个问题:

在尝试向XYZ.prototype对象添加特性之前,需要先设置这些对象。由于继承函数创建了它们,因此必须确保按照正确的顺序进行操作

在继承调用中,父级和子级的顺序是向后的。这是inheritchild,parent,而不是inheritparent,child

var B=函数{ }; B.prototype.f2=函数x{ 返回2*x; }; var C=函数{ B.这是什么; }; 继承c,B;//***移动和更新 var D=函数{ C.这是什么; }; 继承的,C;//**移动和更新 D.prototype.f2=函数x{ 返回C.prototype.f2.callthis,x*7; }; 函数继承子函数、父函数{ Child.prototype=Object.createParent.prototype; Child.prototype.constructor=Child; } var d=新的d;
console.logd.f23;我很好奇,为什么你这么专注地研究ES5原型链,而我至少回答了你的另一个问题。上面的继承函数已过时。从ES2015开始,就有了一种简单、清晰的声明性语法,这种语法可以在不支持它的旧环境中传输。用这种语法更容易理解。所以研究这种过时的方法似乎…不是最佳的。不是我的dv…非常感谢,你的答案非常有用!我参加了关于js中经典oop模式的培训,我们被要求以ES5和ES2015两种方式实现它。但我明白你说的,这是有道理的,让我刚刚熟悉的js世界更加清晰。我只是好奇而已。:-祝你的探险好运!我很好奇,为什么你这么专注地研究ES5原型链,而我至少回答了你的另一个问题。上面的继承函数已过时。从ES2015开始,就有了一种简单、清晰的声明性语法,这种语法可以在不支持它的旧环境中传输。用这种语法更容易理解。所以研究这种过时的方法似乎…不是最佳的。不是我的dv…非常感谢,你的答案非常有用!我参加了关于js中经典oop模式的培训,我们被要求以ES5和ES2015两种方式实现它。但我明白你说的,这是有道理的,让我刚刚熟悉的js世界更加清晰。我只是好奇而已。:-祝你的探险好运!