将参数传递给被调用的模块

时间:2017-11-23 16:03:43

标签: javascript node.js

我的app.js包含:

var m1 = require("./m1");
m1.f1(...);

我的m1.js包含:

var m1 = module.exports = {};
m1.f1 = function(...) { };

我想从somevariable加载m1时传递app.js

var m1 = require("./m1")(somevariable);

如何撰写m1.js以便m1.f1的功能定义可以访问somevariable

3 个答案:

答案 0 :(得分:1)

如果您希望能够这样做:

var m1 = require("./m1")(somevariable);            // it is equivalent to var m = require("./m1"); and then m(someVariable); so m (the exports of the module m1.js) should be a function

然后 m1.js 中的module.exports应该是一个函数:

// m1.js:
module.exports = function(theVariable) {
    // use variable then return the following object:

    return {
        f1: function() { /* ... */ }
    };
}

现在您可以使用 app.js 中的模块,如下所示:

// app.js:
var m1 = require("./m1")(someVariable);

m1.f1(/* ... */);

module.exports是加载模块时调用require将返回的值。

答案 1 :(得分:0)



// app.js
require("./m1")(somevar);

// m1.js
module.exports = function(param) {
    return "something";
}




答案 2 :(得分:0)

如果要将m1作为函数调用,Ibrahim的上述答案是有意义的。但是,在我看来,使用JS类可以更好地满足您的用例。

这样,您就可以导入&#39; m1&#39;使用require('m1')的常规方式,然后使用new m1(<whatever you want to pass in>);

创建M1的实例

现在,当您想要拨打M1时,只需使用m1.f1()

即可

为了支持课程,您的M1应该类似于:

export default class m1 {
 constructor(param1, param2) {
  this.param1 = param1;
  this.param2 = param2;
 }

 f1() {
  do whatever with params here
 }
}

这样做的最大好处是可读性。现在,当某人(或您)查看您的代码时,他们将看到此输入的来源。否则,很难找到参数来自哪里。特别是当你的代码变得更复杂时。