2014-11-06 107 views
13

我有一个模块,里面有一些初始化代码。 init应该在模块加载时执行。目前,我正在做这样的:当需要时初始化模块

// in the module 

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

// in main 

var mod = require('myModule'); 
mod.init(myConfig) 

这一工程,但我想更简洁:

var mod = require('myModule').init('myConfig') 

我应该init回报,以保持mod参考工作?

回答

22

您可以返回this,在这种情况下,它是对exports的引用。

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

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

mod.myMethod(); //Will print 'Has access to this.' 

或者你可以使用一个构造函数:

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

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

myModule.myMethod(); //Prints 'Has access to this' 
+0

谢谢,成功了! – georg 2014-11-07 08:51:08

+0

构造函数示例不起作用。消费者方面,你应该使用'新' – alfredopacino 2017-08-06 17:19:47