Javascript 通过-node.js-awilix模块将参数初始化为从父类扩展而来的类
我想在子类中启动一个参数,并在基类中使用它, 我想键入在子构造函数中启动的this.smth,而不调用super(),因为我只需要在父构造函数中使用某些服务 C子类是通过使用awilix使用node.js的DI启动的 父类仅在执行导入时可用。 例如: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: '
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的作者,您可能希望提取它的一些特性,以使它们可以通过。并在基类和扩展类中注入所需的特性