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的答案。
希望这可以帮助 :)
- Uncaught TypeError在ES6中使用React Router呈现<Router>:type.toUpperCase不是函数
- jslint –edition = latest意外的ES6function。 常量
- 在摩卡testing中可以使用ES6模块吗?
- 我如何使用事件和承诺来控制程序stream?
- 不能用汇总的commonjs导入npm模块:“require is not defined”
- ES6模板Literals V串联的string
- 在TypeScript中,从`import`和`import require`之间的区别
- 为什么transpile node.js后端代码?
- Sails.js + ES6:什么是最好的架构?