我有一个bot.js类,在其中我创建了函数getUserInventory。我在我的主文件bot.js中需要app.js,并创建了一个新实例。
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'
});现在,只需键入getUserInventory,就可以在app.js文件中调用bot.getUserInventory(...)函数。
但是,如果我想在另一个文件中调用函数呢?我是否必须键入与我在app.js中编写的代码相同的代码?或者这会引起问题吗?
我是个初学者。
发布于 2017-09-26 14:32:54
当您调用new SteamBot();时,您正在创建一个SteamBot的新实例,这取决于您打算如何使用您的SteamBot,您需要多个蒸汽还是只需要一个?如果您只需要应用程序中的一个实例,我建议您这样做:
文件/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文件,那么就可以创建一个新的类,但是如果您需要在整个应用程序中保留一个SteamBot实例,只需使用steambot.js即可。
它给出了一个基于文件的单例模式,与我也喜欢的Grégory的答案有点不同。
希望这会有所帮助:)
发布于 2017-09-26 14:26:42
您在app.js中所做的是实例化class SteamBot的一个新的object。
然后调用该对象的方法getUserInventory。
你能从另一个文件中调用这个对象的方法吗?
是的,如果您将刚才创建的对象传递给该文件。如果不是,您必须实例化一个新对象,这可能是一个错误,因为我将与您创建的第一个对象完全不同(类的另一个实现将具有它自己的属性)。
要通过对象实例化,您可以做两件事:
示例:
SteamBot.getUserInventory(...)
class SteamBot {
static getUserInventory(...) {
...
}
}示例:
let instance = null;
class SteamBot {
constructor() {
if (instance) return instance;
instance = this;
return instance;
}
static getInstance() {
return instance || new SteamBot();
}
}发布于 2017-09-26 14:22:41
你怎么命名你的机器人变量并不重要。如果您将其命名为bot,您将调用bot.getUserInventory(...),如果anotherBot,则调用anotherBot.getUserInventory(...),如果是foo,则调用foo.getUserInventory(...)等等。
https://stackoverflow.com/questions/46428892
复制相似问题