node.js | 从其他文件调用类实例的函数

我有一个bot.js类,其中我做了getUserInventory函数。 我在我的主文件app.js中需要bot.js并创build了一个新的实例。

bot.js

class SteamBot { constructor(logOnOptions){ [...] this.logOn(logOnOptions); } logOn(logOnOptions){ [...] } getUserInventory(sid, gameid, contextid, onlyTradeable, callback){ [...] } } module.exports = SteamBot; 

app.js

 const SteamBot = require('./bots/bot.js'); const bot = new SteamBot({ 'logOnOptions' }); 

现在我只需键入bot.getUserInventory(…)就可以在我的app.js文件中调用函数getUserInventory

但是如果我想在另一个文件中调用该函数呢? 我必须input与我在app.js中编写的代码相同的代码吗? 或者会导致问题?

任何答复表示赞赏。 而且我知道这是一个不好的问题,但请不要因为这个问题而投下我的问题

它并不是如何命名你的机器人variables。 如果你命名它的bot你会调用bot.getUserInventory(...) ,如果anotherBot然后anotherBot.getUserInventory(...)如果foo然后foo.getUserInventory(...)

你在app.js中做的是实例化class SteamBot的新object

然后你调用该对象的方法getUserInventory


你能从另一个文件调用这个对象的方法吗?

是的,如果你传递给你刚创build的对象的文件。 如果不是的话,你得实例化一个新的对象,这可能是一个错误,因为我将完全不同于你创build的第一个对象(这个类的其他实现有它自己的属性)。


要通过对象实例化,你可以做两件事情:

  • 使用静态方法。 静态方法不需要实例化。

例:

SteamBot.getUserInventory(...)

 class SteamBot { static getUserInventory(...) { ... } } 
  • 使用单例模式,这将允许只创build一个类的一个实例。

例:

 let instance = null; class SteamBot { constructor() { if (instance) return instance; instance = this; return instance; } static getInstance() { return instance || new SteamBot(); } } 

当你正在调用new SteamBot(); 你正在创build一个SteamBot的新实例,这取决于你打算如何使用你的SteamBot,你需要多个steambots或者只是一个? 如果你的应用只需要一个实例,我会build议你做这样的事情:

文件/steambot.class.js

 // this file contains your class class SteamBot { ... } module.exports = SteamBot; 

文件/steambot.js

 const SteamBotClass = require('./steambot.class'); let SteamBot; module.exports = function(...args) { SteamBot = SteamBot || new SteamBotClass(...args); return SteamBot; }; 

/app.js

 const SteamBot = require('./steambot')({ 'logOnOptions' }); 

如果你想在第三个文件中使用同一个实例:

 const SteamBot = require('./steambot')(); 

有了这个结构,在你的应用程序中,如果你有一天需要它,只需要.class.js文件就可以创build一个新类,但是如果你需要在应用程序中保留一个SteamBot实例, steambot.js

它给你一个基于文件的单例模式,有点不同于我也喜欢的Grégory的答案。

希望这可以帮助 :)