2014-11-06 75 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