javascript - 基类添加扩展类时如何避免循环依赖?
问题描述
我正在使用从容器类扩展的类。该类的每个实例本身就是一个容器,但顶级容器不是该类的一个实例。
文件 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);
问题是这些文件中至少有一个以空对象或所需类未定义而告终。我尝试遵循其他节点循环依赖解决方案的尝试没有奏效(或者我没有正确理解它们)。
目的是将这两个类保存在自己的文件中,我知道我可以通过使用同一个文件来解决问题(但这将是项目中的一个例外?),我不确定我(或消费者) 会在逻辑上要求它,因为它们位于不同的区域。
那么我可以通过哪些方式来解决这个问题,我错过了?
解决方案
根据 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];
}
}
推荐阅读
- python - Python中的for循环根据以前的返回计算每天的新权重
- c - Unable to pass additional flags to gcc through mpicc
- python - 来自现有 pandas 数据框列的 MultiIndex 列
- html - 如何绘制三个圆圈并仅将两个圆圈连接起来?
- php - 如何使搜索系统在 laravel 中工作,它可以通过存储在数据库中的字符串数组运行?
- docker - 本地 Rancher 集群中的 Kubernates 节点端口服务
- grafana-loki - 获取 LogQL line_format 中的原始条目值
- apple-push-notifications - iOS 设备中 MFP7.1 应用程序的推送通知是否会从 2021 年 3 月 31 日起停止工作?
- python - 有没有直接的方法可以在python中逐列检查日期格式(使用日期时间)?
- python-3.x - 为什么 Numba 在此代码中不使用时间?