当基础 class 添加扩展 class 时,如何避免循环依赖?
How do I avoid a circular dependancy when the base class adds an extended class?
我正在使用从容器 class 延伸而来的 class。 class 的每个实例本身就是一个容器,但顶级容器不是 class.
的实例
文件 1
const Command = require('Command');
class CommandManager {
constuctor () {
this.commands = {};
}
add (object) {
const command = new Command(object);
this.commands[command.name] = command;
}
get (string) {
return this.commands[string];
}
}
文件 2
const CommandManager = require("CommandManager");
class Command extends CommandManager {
constructor (object) {
super();
//Other-code
}
// Class Methods
}
在运行时它应该看起来像这样:
client.commands = new CommandManager();
client.commands.add(object); // Add function also filters down adding to sub elements
或:
const command = client.commands.get(string);
command.add(object);
问题是这些文件中至少有一个以空对象结束,或者未根据所需 class 定义。我尝试遵循其他节点循环依赖解决方案的尝试没有奏效(或者我没有正确理解它们)。
目的是将 2 classes 保存在他们自己的文件中,我知道我可以通过使用相同的文件来解决问题(但这在项目中会是一个例外吗?),并且我我不确定我(或消费者)将如何从逻辑上要求它,因为他们在不同的地区。
那么我可以通过哪些方式解决我所缺少的问题?
根据 Bergi 发表的评论:
在 CommandManager 文件中使 require 延迟加载模块并允许在调用它之前解决依赖关系。
class CommandManager {
constuctor () {
this.commands = {};
}
add (object) {
const Command = require('Command');
const command = new Command(object);
this.commands[command.name] = command;
}
get (string) {
return this.commands[string];
}
}
我正在使用从容器 class 延伸而来的 class。 class 的每个实例本身就是一个容器,但顶级容器不是 class.
的实例文件 1
const Command = require('Command');
class CommandManager {
constuctor () {
this.commands = {};
}
add (object) {
const command = new Command(object);
this.commands[command.name] = command;
}
get (string) {
return this.commands[string];
}
}
文件 2
const CommandManager = require("CommandManager");
class Command extends CommandManager {
constructor (object) {
super();
//Other-code
}
// Class Methods
}
在运行时它应该看起来像这样:
client.commands = new CommandManager();
client.commands.add(object); // Add function also filters down adding to sub elements
或:
const command = client.commands.get(string);
command.add(object);
问题是这些文件中至少有一个以空对象结束,或者未根据所需 class 定义。我尝试遵循其他节点循环依赖解决方案的尝试没有奏效(或者我没有正确理解它们)。
目的是将 2 classes 保存在他们自己的文件中,我知道我可以通过使用相同的文件来解决问题(但这在项目中会是一个例外吗?),并且我我不确定我(或消费者)将如何从逻辑上要求它,因为他们在不同的地区。
那么我可以通过哪些方式解决我所缺少的问题?
根据 Bergi 发表的评论:
在 CommandManager 文件中使 require 延迟加载模块并允许在调用它之前解决依赖关系。
class CommandManager {
constuctor () {
this.commands = {};
}
add (object) {
const Command = require('Command');
const command = new Command(object);
this.commands[command.name] = command;
}
get (string) {
return this.commands[string];
}
}