传递参数给一个被调用的模块

我的app.js包含:

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

我的m1.js包含:

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

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

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

我怎样才能写m1.js使m1.js的函数定义可以访问m1.f1

如果你想能够做到这一点:

 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 

那么module.exports中的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是加载模块时调用返回的值。

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

如果您想将m1作为函数调用,则易卜拉欣的上述答案是有意义的。 但是在我看来,使用JS类更好地服务于你的用例。

这样,你可以通过require('m1')以常规方式导入'm1',然后用new m1(<whatever you want to pass in>); require('m1')创build一个M1的实例new m1(<whatever you want to pass in>);

现在当你想打电话给M1时,只需使用m1.f1()

为了支持课程,你的M1应该是这样的:

 export default class m1 { constructor(param1, param2) { this.param1 = param1; this.param2 = param2; } f1() { do whatever with params here } } 

这样做的最大好处是可读性。 现在当某个人(或者你)看着你的代码时,他们会看到这个input来自哪里。 否则,可能很难追查哪些参数来自哪里。 特别是当你的代码变得更复杂。