2017-01-28 2 views
3

Дорогой, все, что я только начал изучать модули в javascript. Это моя реализация модуля:Как экспортировать функции в модули?

module.exports = function(logger_level) { 
    this.info = function(message) { 
     stdout(message); 
    }; 
}; 

function stdout(message) 
{ 
    process.stdout.write(message+'\n'); 
} 

, и я должен ссылаться на это следующим образом:

var logger = require('./js/logger.js'); 
var logger1 = new logger("info1"); 

logger1.info("info"); 

Мой вопрос заключается в том, чтобы изменить реализацию модуля, так что я мог бы вызвать его, как это :

var logger = require('./js/logger.js')("info"); 
logger.info("info"); 

ответ

1

Вы ищете factory function. Применяя его к вашему прецеденту, он будет выглядеть так:

module.exports = function(logger_level) { 
    return { 
     info: function(message) { 
      stdout(message); 
     } 
    }; 
}; 

function stdout(message) 
{ 
    process.stdout.write(message+'\n'); 
} 
1

Вы можете обернуть функцию конструктора с объектом и возвращает экземпляр вашей функции конструктора

module.exports = { 

    return new function(logger_level) { 
     this.info = function(message) { 
      stdout(message); 
     }; 
    }; 

} 

И называют это

var logger = require('./js/logger.js'); 
logger.info("info"); 

Вы также можете сделать одноэлементно шаблон для работы с одним экземпляром вашей функции конструктора

2

Если вы хотите использовать его как то, что нет никакой необходимости для конструктор функции на всех:

module.exports = { 
    info: function(message) { 
     stdout(message); 
    } 
}; 

function stdout(message) 
{ 
    process.stdout.write(message+'\n'); 
} 

Я только начал изучать модули в JavaScript.

Обратите внимание, что это не «модули в JavaScript», так как это «модули в NodeJS». Модули JavaScript, которые не были введены до ES2015 («ES6»), выглядят и действуют совсем по-другому, но пока они не поддерживаются в целом. Когда они, ваш модуль может выглядеть следующим образом:

// ES2015+ syntax 
export default { 
    info: function(message) { 
     stdout(message); 
    } 
}; 

function stdout(message) 
{ 
    process.stdout.write(message+'\n'); 
} 

... и использовать так:

import logger from './logger.js'; 
logger.info("info"); 
Смежные вопросы