Oop typescript父类正在调用派生函数
我有一个基类和一个派生类,每个都有init函数 当我构造派生对象时,我希望它:Oop typescript父类正在调用派生函数,oop,inheritance,typescript,Oop,Inheritance,Typescript,我有一个基类和一个派生类,每个都有init函数 当我构造派生对象时,我希望它: 调用其基本构造函数,其中: 1.1。调用其init函数 调用它自己的(派生的)init函数 问题是派生的init函数被调用了两次 代码: 输出: Derived init Derived init 在这种情况下,我们希望调用baseinit(),然后调用childinit()我们可以这样解决它: constructor() { super.init(); super(); } 检查
Derived init
Derived init
在这种情况下,我们希望调用base
init()
,然后调用childinit()
我们可以这样解决它:
constructor() {
super.init();
super();
}
检查
首先是子对象,然后是基对象时的解决方案应该是这样的
constructor() {
super();
//this.init();
super.init();
}
一个有效的例子是。单击运行以查看生成的两个按钮
如果我们只想使用派生的东西,就不必再次调用init
:
constructor() {
super();
//this.init();
// init will be called in super
}
本例仅使用了另一种方法可能是这样的(也使用Radim的游乐场示例): 通过从派生类调用祖先的init函数,可以获得想要的流 将anscestor的init视为在派生类(-es)中被重写的虚拟方法
init被覆盖,这就是它的全部内容。。。在派生中,您可以执行诸如base.init()或super.init()之类的操作。我不知道typescript关键字-无论如何,您必须明确地调用基本方法。然而,虽然从理论上讲这是一个糟糕的设计,但我没有提到,但我希望顺序是1.parent.init,2.derived.init.Make sense,然后只调用
super.init();超级()代码>;);)。我还扩展了我的答案并添加了另一个示例。。。
constructor() {
super();
//this.init();
// init will be called in super
}
class Base{
constructor() {
this.init();
}
init(){
var button = document.createElement('button');
button.textContent = "base init";
document.body.appendChild(button);
}
}
class Derived extends Base{
constructor() {
super();
}
init(){
super.init();
var button = document.createElement('button');
button.textContent = "Derived init";
document.body.appendChild(button);
}
}
var obj = new Derived ();