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

时间:2018-06-12 06:39:08

标签: 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];
}
import BaseQuery from "../../src/BaseQuery";
import Task from "./Task";

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

在Task类中,checklist是未定义的,并且在Checklist类中定义了Task,但没有像我期望的那样。反正有没有让它发挥作用?

2 个答案:

答案 0 :(得分:2)

你刚刚经历了循环依赖。 Task需要ChecklistChecklist需要Task;解释者无法处理。

其中一个解决方案是使用get operator,这会延迟ChecklistTask类的解析并修复循环依赖问题。

调用Checklist / Task时,解释程序必须解析

belongsTohasMany

工作示例



class Task {
  static get belongsTo() {
    return [Checklist];
  }

  static get name() {
    return 'Task-class';
  }
}

class Checklist {
  static get hasMany() {
    return [Task];
  }

  static get name() {
    return 'Checklist-task';
  }
}

console.log(Checklist.hasMany.map(x => x.name));

console.log(Task.belongsTo.map(x => x.name));




答案 1 :(得分:0)

我不知道你是否可以从类中做到这一点(因为你先定义的第一个不知道第二个,它也可能需要静态构造函数)。但是,我能够使用在定义类本身之后调用的静态方法:

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]