Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过-node.js-awilix模块将参数初始化为从父类扩展而来的类_Javascript_Node.js_Oop_Koa - Fatal编程技术网

Javascript 通过-node.js-awilix模块将参数初始化为从父类扩展而来的类

Javascript 通过-node.js-awilix模块将参数初始化为从父类扩展而来的类,javascript,node.js,oop,koa,Javascript,Node.js,Oop,Koa,我想在子类中启动一个参数,并在基类中使用它, 我想键入在子构造函数中启动的this.smth,而不调用super(),因为我只需要在父构造函数中使用某些服务 C子类是通过使用awilix使用node.js的DI启动的 父类仅在执行导入时可用。 例如: modulesArr.push(['src/classes/*.js', Lifetime.SINGLETON]) container.loadModules( modulesArr, { formatName: '

我想在子类中启动一个参数,并在基类中使用它, 我想键入在子构造函数中启动的this.smth,而不调用super(),因为我只需要在父构造函数中使用某些服务

C子类是通过使用awilix使用node.js的DI启动的 父类仅在执行导入时可用。 例如:

modulesArr.push(['src/classes/*.js', Lifetime.SINGLETON])
container.loadModules(
    modulesArr,
    {
        formatName: 'camelCase'
    }
)
基类:

export default class BaseClass {

    constructor({aservice, bservice}){
        this.aservice = aservice
    }

    async testFun(){
       return this.testvar
    }

}
扩展类

import BaseClass from './base/base.class'
export default class ExtendedClass extends BaseClass {

    constructor(){
        super()
        this.testVar = "smth"

    }

    async testFun(){
       return this.testvar
    }

}

但后来我出现了一个错误,因为在OOP中,当扩展一个没有默认构造函数(即没有任何参数的构造函数)的类时,我没有将aservice和bservice发送给super(aservice,bservice)

,如果重新定义构造函数,则必须使用预期参数调用基构造函数:

import BaseClass from './base/base.class'
export default class ExtendedClass extends BaseClass {

    constructor({aservice, bservice}){
        super({aservice, bservice})
        this.testVar = "smth"

    }

    async testFun(){
       return this.testvar
    }

}
或:

从“./base/base.class”导入基类
导出默认类ExtendedClass扩展基类{
构造函数(){
超级({aservice:,bservice:})
this.testVar=“smth”
}
异步testFun(){
返回this.testvar
}
}
在普通javascript(和es6)中,只能有一个构造函数,并且应用相同的规则

如果您不能做到这一点,换句话说,如果您不能遵守基类的契约,这表明扩展这个类不是您想要做的

而是查看模式(将基类实例作为ExtendedClass的成员并调用其方法)


如果您是BaseClass的作者,您可能希望提取它的一些特性,以使它们可以通过。并在基类和扩展类中注入所需的功能。

在OOP中,通常,当您扩展没有默认构造函数的类(即没有任何参数的构造函数)时,如果您重新定义构造函数,则必须使用预期参数调用基构造函数:

import BaseClass from './base/base.class'
export default class ExtendedClass extends BaseClass {

    constructor({aservice, bservice}){
        super({aservice, bservice})
        this.testVar = "smth"

    }

    async testFun(){
       return this.testvar
    }

}
或:

从“./base/base.class”导入基类
导出默认类ExtendedClass扩展基类{
构造函数(){
超级({aservice:,bservice:})
this.testVar=“smth”
}
异步testFun(){
返回this.testvar
}
}
在普通javascript(和es6)中,只能有一个构造函数,并且应用相同的规则

如果您不能做到这一点,换句话说,如果您不能遵守基类的契约,这表明扩展这个类不是您想要做的

而是查看模式(将基类实例作为ExtendedClass的成员并调用其方法)

如果您是BaseClass的作者,您可能希望提取它的一些特性,以使它们可以通过。并在基类和扩展类中注入所需的特性