在需要时初始化模块

geo*_*org 19 module node.js

我有一个模块,里面有一些初始化代码.应在加载模块时执行init.目前我这样做:

 // in the module

 exports.init = function(config) { do it }

 // in main

 var mod = require('myModule');
 mod.init(myConfig)
Run Code Online (Sandbox Code Playgroud)

这有效,但我想更简洁:

 var mod = require('myModule').init('myConfig')
Run Code Online (Sandbox Code Playgroud)

应该init返回什么以保持mod参考工作?

Ben*_*une 38

您可以返回this,这是exports本例中的引用.

exports.init = function(init) {
    console.log(init);
    return this;
};

exports.myMethod = function() {
    console.log('Has access to this');
}
Run Code Online (Sandbox Code Playgroud)
var mod = require('./module.js').init('test'); //Prints 'test'

mod.myMethod(); //Will print 'Has access to this.'
Run Code Online (Sandbox Code Playgroud)

或者您可以使用构造函数:

module.exports = function(config) {
    this.config = config;

    this.myMethod = function() {
        console.log('Has access to this');
    };
    return this;
};
Run Code Online (Sandbox Code Playgroud)
var myModule = require('./module.js')(config);

myModule.myMethod(); //Prints 'Has access to this'
Run Code Online (Sandbox Code Playgroud)

  • 构造函数示例不起作用。消费者方面,您应该使用“新” (2认同)