Javascript 如何在Aurelia中注入父类?

Javascript 如何在Aurelia中注入父类?,javascript,inheritance,inject,aurelia,ecmascript-2016,Javascript,Inheritance,Inject,Aurelia,Ecmascript 2016,我有一个父类,我想在其中注入一些模块,然后我有一些派生类,我想在其中使用这些注入的模块。 然而,在派生类中,您必须在没有参数的情况下调用super(),因此父类中的注入模块是未定义的。 这怎么可能呢 import {inject} from 'aurelia-framework'; import {HttpClient} from 'aurelia-http-client'; @inject (HttpClient) export class Parent{ constructor(mo

我有一个父类,我想在其中注入一些模块,然后我有一些派生类,我想在其中使用这些注入的模块。 然而,在派生类中,您必须在没有参数的情况下调用
super()
,因此父类中的注入模块是未定义的。 这怎么可能呢

import {inject} from 'aurelia-framework';
import {HttpClient} from 'aurelia-http-client';

@inject (HttpClient)
export class Parent{
   constructor(module){
       //this constructor is called from derived class without parameters,
       //so 'module' is undefined !!
       this.injectedmodule = module;
   }
}


export class ClassA extends Parent{
    constructor(){
       super();
       this.injectedmodule.get()  // injectedmodule is null !!!   
    }
}

好的,刚刚找到解决方案,模块实际上被注入到派生类中,并通过super()调用传递给父级:


一般建议是尽可能避免继承。用构图代替。在这种情况下:

import {inject} from 'aurelia-framework';
import {HttpClient} from 'aurelia-http-client';

@inject (HttpClient)
export class Parent{
    constructor(module){
       this.injectedmodule = module;
    }
}

@inject(Parent)
export class ClassA {
    constructor(parent){
       this.parent = parent;
       this.parent.injectedmodule.get()  // ok !!!   
    }
}

有一个网站为我解释了一个很好的方法

下面是一个例子:

import {inject} from 'aurelia-framework';
import {Router} from 'aurelia-router';

@inject(Router)
export class Parent {
    constructor(router) {
        this.router = router;
    }
}


import {Parent} from './parent';

export class Child extends Parent {
    constructor(...rest) {
        super(...rest);
    }
}

删除注释,移动到回答。如果您需要将某些内容注入ClassA,那么ClassA注入是在父注入之前还是之后?为什么要避免继承?@MatthewJamesDavis避免深层继承层次结构有很多原因。然而,实现多个接口(可以通过组合和委托来实现)并没有问题。这些问题源于对行为的假设,这些假设很难维护,并且在大多数语言中不可能在类型级别进行记录。随着层次结构深度的增加,这会变得更加麻烦。避免过度继承还有许多其他原因。
import {inject} from 'aurelia-framework';
import {Router} from 'aurelia-router';

@inject(Router)
export class Parent {
    constructor(router) {
        this.router = router;
    }
}


import {Parent} from './parent';

export class Child extends Parent {
    constructor(...rest) {
        super(...rest);
    }
}