Javascript JS继承示例:递归太多
对不起,我是js的新手。我想重写D类中的f2函数。但出于某种原因,FireFox告诉我:递归太多了。你能告诉我递归发生在哪里,以及如何使这段代码按预期工作吗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
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世界更加清晰。我只是好奇而已。:-祝你的探险好运!