Javascript 为什么对象的新实例未定义?

Javascript 为什么对象的新实例未定义?,javascript,node.js,node-telegram-bot-api,Javascript,Node.js,Node Telegram Bot Api,我无法使用nodejs在另一个java脚本文件中使用同一个对象实例 我正在研制电报机器人。因为文件变得很大而且混乱,我想把我的机器人的功能分割成几个额外的js文件。但我不知道如何在多个javascript文件之间共享同一个对象实例 ///////////////////////8Ball File const {eightBall} = require("./main"); const ballBot = myAwseomeBot; function eightBall() { ba

我无法使用nodejs在另一个java脚本文件中使用同一个对象实例

我正在研制电报机器人。因为文件变得很大而且混乱,我想把我的机器人的功能分割成几个额外的js文件。但我不知道如何在多个javascript文件之间共享同一个对象实例

///////////////////////8Ball File
const {eightBall} = require("./main");
const ballBot = myAwseomeBot;

function eightBall() {

    ballBot.onText(/\/8ball/, (msg, callback) => {
        let ranNum = Math.floor(Math.random() * 15) + 1;
        const chatId = msg.chat.id;
        const reply_to_message_id = msg.message_id;
        console.log(ranNum);
        switch (ranNum) {
            case 1:
                ballBot.sendMessage(chatId, "Ja");
                break;
      }
    })
}


//main file

let myAwesomeBot  = new TelegramBot(botToken, {polling:true});
exports.myAwesomeBot = myAwesomeBot;










ballBot.onText(/\/8ball/, (msg, callback) => {
        ^
TypeError: Cannot read property 'onText' of undefined

可能是第二行有打字错误吗?应该是 我的机器人不是我的机器人

const ballBot = myAwseomeBot;


可能是第二行有打字错误吗?应该是 我的机器人不是我的机器人

const ballBot = myAwseomeBot;


你检查过ballBot的定义了吗?
当需要主文件时,请尝试删除括号。如果您想在代码中共享同一个实例,我还建议您使用Singleton模式

您是否检查了ballBot的定义?
当需要主文件时,请尝试删除括号。如果您想在代码中共享同一个实例,我还建议您使用Singleton模式

这里的代码中没有显示它,但是您可能有一个循环依赖关系,其中a
require
sb和B
require
sa

与您的用例相关的最简单解决方案是在其他文件中为您的bot定义和实现命令,并让您的bot文件附加/使用它们:

8ball.js
从“where”导入{电报内容};
导出myCommand 1={
模式:/\/8ball/,
eventName:“ontext”,
回调:(msg,msgCallback)=>{/*使用“this”,就像它是bot实例一样*/};
};
main.js
可能还有其他bot类方法更适合附加通用事件处理程序/侦听器,以及其他指定模块导出的方法,但其思想是您的命令文件不需要导入bot文件。我还没有研究过telegram bot API,因此在附加事件处理程序时,它可能会以某种方式委托bot实例。如果是,就用它

这里的代码中没有显示它,但是您可能有一个循环依赖关系,其中a
require
sb和B
require
sa

与您的用例相关的最简单解决方案是在其他文件中为您的bot定义和实现命令,并让您的bot文件附加/使用它们:

8ball.js
从“where”导入{电报内容};
导出myCommand 1={
模式:/\/8ball/,
eventName:“ontext”,
回调:(msg,msgCallback)=>{/*使用“this”,就像它是bot实例一样*/};
};
main.js
可能还有其他bot类方法更适合附加通用事件处理程序/侦听器,以及其他指定模块导出的方法,但其思想是您的命令文件不需要导入bot文件。我还没有研究过telegram bot API,因此在附加事件处理程序时,它可能会以某种方式委托bot实例。如果是,就用它

谢谢。好眼力。但是没有,错别字只是因为我把stack overflow中的名字改成了更一般的名字。谢谢。好眼力。但是没有,输入错误只是因为我在stack overflow中将这里的名称更改为更通用的名称。循环导入依赖项。A需要B,B需要A,你的应用程序设计得很差。你说得对,我还是个新的面向对象编程。那我该怎么设计呢?我的意思是eightball.js当然需要main.js,反之亦然。根据你的建议,我该怎么做?把所有东西都写进一个大文件?不,八个球不需要主文件。它应该实现一个处理程序,main应该将该处理程序附加到它需要的任何事件循环导入依赖项。A需要B,B需要A,你的应用程序设计得很差。你说得对,我还是个新的面向对象编程。那我该怎么设计呢?我的意思是eightball.js当然需要main.js,反之亦然。根据你的建议,我该怎么做?把所有东西都写进一个大文件?不,八个球不需要主文件。它应该实现一个处理程序,main应该将该处理程序附加到它需要的任何事件上