我有一个bot.js类,我在其中创建了函数getUserInventory。我在我的主文件app.js中需要bot.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'
});
现在我只需输入bot.getUserInventory(...)
即可在我的app.js文件中调用函数getUserInventory。
但是如果我想在另一个文件中调用该函数呢?我是否必须输入我在app.js中编写的相同代码?或者这会导致问题吗?
我是初学者。
答案 0 :(得分:0)
它不会影响您如何命名机器人变量。如果您将其命名为bot
,则会调用bot.getUserInventory(...)
,如果anotherBot
则anotherBot.getUserInventory(...)
foo
,然后foo.getUserInventory(...)
,依此类推
答案 1 :(得分:0)
您在app.js
中所做的是实例化object
class
的新SteamBot
。
然后你调用该对象的方法getUserInventory
。
你能从另一个文件中调用这个对象的方法吗?
如果您将刚创建的对象传递给该文件,请单击是。如果没有,你必须实例化一个新对象,这可能是一个错误,因为我将与你创建的第一个对象完全不同(该类的另一个实现将会有它& #39;自己的属性)。
要通过对象实例化,您可以做两件事:
示例:
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();
}
}
答案 2 :(得分:0)
当您呼叫new SteamBot();
时,您正在创建SteamBot
的新实例,这取决于您打算如何使用SteamBot,您需要多个steambots还是只需要一个?如果您的应用只需要一个实例,我会建议您做一些类似的事情:
file /steambot.class.js
// this file contains your class
class SteamBot {
...
}
module.exports = SteamBot;
file /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
文件就可以创建一个新类,但如果你需要保留{{1}的一个实例在应用程序中,只需要SteamBot
。
它给你一个基于文件的单例模式,与我也喜欢的Grégory的答案有点不同。
希望这会有所帮助:)