首页 > 解决方案 > 基类添加扩展类时如何避免循环依赖?

问题描述

我正在使用从容器类扩展的类。该类的每个实例本身就是一个容器,但顶级容器不是该类的一个实例。

文件 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);

问题是这些文件中至少有一个以空对象或所需类未定义而告终。我尝试遵循其他节点循环依赖解决方案的尝试没有奏效(或者我没有正确理解它们)。

目的是将这两个类保存在自己的文件中,我知道我可以通过使用同一个文件来解决问题(但这将是项目中的一个例外?),我不确定我(或消费者) 会在逻辑上要求它,因为它们位于不同的区域。

那么我可以通过哪些方式来解决这个问题,我错过了?

标签: javascriptnode.jsclassrequirecircular-dependency

解决方案


根据 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];
    }
}

推荐阅读