2014-11-06 26 views
13

Ich habe ein Modul mit einigen Initialisierungscode im Inneren. Die Initialisierung sollte ausgeführt werden, wenn das Modul geladen wird. Im Moment ist es wie dies ich tue:Initialisieren Sie ein Modul, wenn es erforderlich ist

// in the module 

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

// in main 

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

Das funktioniert, aber ich möchte prägnanter sein:

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

Was sollte init Rückkehr um mod Referenzarbeits zu halten?

Antwort

22

Sie können this zurückgeben, was in diesem Fall eine Referenz auf exports ist.

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

Oder Sie einen Konstruktor verwenden:

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

Danke, das hat geklappt! – georg

+0

Das Konstruktorbeispiel funktioniert nicht. Verbraucherseite sollten Sie 'new' verwenden – alfredopacino

Verwandte Themen