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]