ES6 类 静态变量中相互依赖
ES6 Classes that depend on each other in static variables
我有两个 class 我想为其定义关系。我正在尝试使用静态变量来实现此目的,但是未定义对 classes 的引用。
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];
}
在任务 class 中,清单未定义,在清单 class 中,任务已定义,但与我预期的不同。有没有办法让这个工作?
您刚刚经历了循环依赖。 Task
需要 Checklist
而 Checklist
需要 Task
;解释器无法处理。
其中一个解决方案是使用 get operator,这将延迟 Checklist
和 Task
类 的解析并修复循环依赖问题。
Checklist
和 Task
必须在调用 belongsTo
/hasMany
.
时由解释器解析
工作示例 :
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));
我不知道您是否可以从 class 内部执行此操作(因为无论您先定义哪个,都不会知道第二个,而且它也可能需要静态构造函数)。但是,我能够让它与在 classes 本身被定义后调用的静态方法一起工作:
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 我想为其定义关系。我正在尝试使用静态变量来实现此目的,但是未定义对 classes 的引用。
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];
}
在任务 class 中,清单未定义,在清单 class 中,任务已定义,但与我预期的不同。有没有办法让这个工作?
您刚刚经历了循环依赖。 Task
需要 Checklist
而 Checklist
需要 Task
;解释器无法处理。
其中一个解决方案是使用 get operator,这将延迟 Checklist
和 Task
类 的解析并修复循环依赖问题。
Checklist
和 Task
必须在调用 belongsTo
/hasMany
.
工作示例 :
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));
我不知道您是否可以从 class 内部执行此操作(因为无论您先定义哪个,都不会知道第二个,而且它也可能需要静态构造函数)。但是,我能够让它与在 classes 本身被定义后调用的静态方法一起工作:
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]