Примечание: относительно комментария по аналогичному вопросу Я хотел бы указать, что меня не интересует разница между module.exports
и exports
. Скорее, мой фокус в этом вопросе заключается в различии между экспортом функции, которая при ее вызове создает объект с функциями, которые мы хотим разделить, и напрямую назначаем эти функции как свойства объекта exports
.разница между модулем экспорта идиомы
Я хотел бы понять разницу между следующими двумя способами экспорта функций в качестве модуля (и прячась локальное состояние) в JavaScript:
путь 1
var x = 0;
function get() {return x;}
function set(_x) {x = _x;}
exports.get = get;
exports.set = set;
путь 2
module.exports = function() {
var x = 0;
function get() {return x;}
function set(_x) {x = _x;}
return {get:get, set:set};
};
(обратите внимание, что в путь 2 Мне пришлось назначить module.exports
, присваивая exports
не получилось).
То, как код в пути 1 используется это:
var gs = require('./get-set-a.js');
console.log(gs.get());
gs.set(100);
console.log(gs.get());
То, как код в пути 2 используется это:
var gs = require('./get-set-b.js')();
console.log(gs.get());
gs.set(100);
console.log(gs.get());
При работе как с помощью команды line, under node.js
Я получаю одинаковые результаты.
Есть ли разница между путем 1 и образом 2 я должен быть в курсе? Возможно, они подходят для разных случаев использования? Если нет, что более идиоматично?
@Andy был там и в подобном места; не тот же угол - вот почему в моем вопросе я лишь * упоминаю * тот факт, что в последнем случае мне пришлось присваивать 'module.exports' в отличие от' export', но я больше не занимаюсь или не нуждаюсь в каких-либо разъяснениях на том. –
@ близкие избиратели: это не дубликат. Хотя между «module.exports» и «export» существует путаница, фактический вопрос здесь о экземплярах модулей не упоминается ** в «дубликате», не говоря уже о * охватываемых * – Matt