2014-11-06 8 views
13

Mam moduł z pewnym kodem inicjalizacyjnym wewnątrz. Proces init powinien zostać wykonany po załadowaniu modułu. W tej chwili robię to tak:Inicjalizuj moduł, gdy jest to wymagane

// in the module 

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

// in main 

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

To działa, ale chciałbym być bardziej zwięzły:

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

Co należy init powrót w celu utrzymania mod pracy odniesienia?

Odpowiedz

22

Możesz zwrócić this, który jest w tym przypadku numerem referencyjnym 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.' 

Albo można użyć konstruktora:

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

Dzięki, że działa! – georg

+0

Przykład konstruktora nie działa. Po stronie konsumenta powinieneś użyć 'new' – alfredopacino

Powiązane problemy