2014-11-06 1 views
13

Ho un modulo con all'interno del codice di inizializzazione. L'init deve essere eseguito quando il modulo è caricato. Al momento sto facendo in questo modo:Inizializza un modulo quando è necessario

// in the module 

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

// in main 

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

Che funziona, ma mi piacerebbe essere più conciso:

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

cosa dovrebbe init ritorno al fine di mantenere mod di lavoro di riferimento?

risposta

22

È possibile restituire this, che è un riferimento a exports in questo caso.

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.' 

Oppure si potrebbe usare un costruttore:

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

Grazie, che ha funzionato! – georg

+0

l'esempio del costruttore non funziona. Lato consumatore dovresti usare 'new' – alfredopacino