Oop typescript父类正在调用派生函数

Oop typescript父类正在调用派生函数,oop,inheritance,typescript,Oop,Inheritance,Typescript,我有一个基类和一个派生类,每个都有init函数 当我构造派生对象时,我希望它: 调用其基本构造函数,其中: 1.1。调用其init函数 调用它自己的(派生的)init函数 问题是派生的init函数被调用了两次 代码: 输出: Derived init Derived init 在这种情况下,我们希望调用baseinit(),然后调用childinit()我们可以这样解决它: constructor() { super.init(); super(); } 检查

我有一个基类和一个派生类,每个都有init函数

当我构造派生对象时,我希望它:

  • 调用其基本构造函数,其中:

    1.1。调用其init函数

  • 调用它自己的(派生的)init函数

  • 问题是派生的init函数被调用了两次

    代码:

    输出:

    Derived init
    Derived init
    

    在这种情况下,我们希望调用base
    init()
    ,然后调用child
    init()
    我们可以这样解决它:

    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 ();