Javascript 在静态变量中相互依赖的ES6类

Javascript 在静态变量中相互依赖的ES6类,javascript,node.js,class,ecmascript-6,ecma,Javascript,Node.js,Class,Ecmascript 6,Ecma,我想为两个类定义关系。我试图使用静态变量来实现这一点,但是没有定义对类的引用 import BaseQuery from "../../src/BaseQuery"; import Checklist from "./Checklist"; export default class Task extends BaseQuery { static belongsTo = [Checklist]; } 在Task类中,checklist是未定义的,在checklist类中,Task是已定义

我想为两个类定义关系。我试图使用静态变量来实现这一点,但是没有定义对类的引用

import BaseQuery from "../../src/BaseQuery";
import Checklist from "./Checklist";

export default class Task extends BaseQuery {
  static belongsTo = [Checklist];
}


在Task类中,checklist是未定义的,在checklist类中,Task是已定义的,但不是我所期望的。还有什么方法可以让它工作吗?

您刚刚经历了循环依赖<代码>任务需要
检查表
检查表
需要
任务
;翻译员无法处理这个问题

解决方案之一是使用,这将延迟
检查表
任务
类的解决,并修复循环依赖性问题

检查表
任务
必须由解释器在调用
belongsTo
/
时解决


工作示例

类任务{
静态get belongsTo(){
返回[检查表];
}
静态获取名称(){
返回“任务类”;
}
}
课堂检查表{
静态get hasMany(){
返回[任务];
}
静态获取名称(){
返回“检查表任务”;
}
}
log(Checklist.hasMany.map(x=>x.name));

log(Task.belongsTo.map(x=>x.name))我不知道是否可以从类内部执行(因为您首先定义的任何一个都不知道第二个,而且它可能还需要静态构造函数)。但是,我能够让它与在定义类本身之后调用的静态方法一起工作:

class Rubyish{
    static appendProp(propName, value){
        if (!this[propName]) {
            this[propName] = []
        }
        this[propName].push(value)
    }
    static belongsTo(cls){
        this.appendProp('belongsToClasses', cls)
    }
    static hasMany(cls){
        this.appendProp('hasManyClasses', cls)
    }
}

class Task extends Rubyish{
}

class Checklist extends Rubyish{
}

Task.belongsTo(Checklist)
Checklist.hasMany(Task)
编辑以添加:这可能有些过分,因为您可以在没有静态方法的情况下执行此操作:

class NewTask{}
class NewCheckList{}

NewTask.belongsTo = [NewCheckList]

NewCheckList.hasMany = [NewTask]

请注意,如果两个
class
声明位于同一个位置,OPs代码中的静态类字段甚至不起作用file@Bergi是的,你说得对,谢谢。我已经用一个片段更新了我的答案,其中给出了关于工作解决方案的更多解释。既然您已经使用了getter(它本身就是一个解决方案),就不再需要将它们放在同一个文件中了。@Bergi Hm我认为使用导入时依赖关系仍然是一个问题。但是在你说了这些之后,我创建了一个我自己的小项目,你是100%正确的。在使用getter时,解释程序不需要在导入时解析。Thx,我学到了一些东西出口只需要声明是可解决的,还不需要初始化。这就像是在模块之间吊装。
class NewTask{}
class NewCheckList{}

NewTask.belongsTo = [NewCheckList]

NewCheckList.hasMany = [NewTask]