传递参数给一个被调用的模块
我的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来自哪里。 否则,可能很难追查哪些参数来自哪里。 特别是当你的代码变得更复杂。