从Node中的其他文件调用类实例的函数

时间:2017-09-26 14:16:12

标签: javascript node.js ecmascript-6

我有一个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中编写的相同代码?或者这会导致问题吗?

我是初学者。

3 个答案:

答案 0 :(得分:0)

它不会影响您如何命名机器人变量。如果您将其命名为bot,则会调用bot.getUserInventory(...),如果anotherBotanotherBot.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的答案有点不同。

希望这会有所帮助:)