Первый иш
Как цитата из this поста:
- В коде верхнего уровня в модуле Node, «этот» эквивалентно module.exports.
Поэтому 2 могут показаться эквивалентными. Но они не являются - во втором примере вы меняете объект, на который ссылается «module.exports». Это опасно, поскольку любые предыдущие изменения, которые вы внесли в исходный объект, ранее упомянутый «module.exports» в том же модуле (спасибо, что Kevin за то, что он сообщил мне, что это было неясно), больше не будет доступно при необходимости. В будущем, если кто-то захочет добавить функцию, используя другой метод, и сделать ее доступной до вашего повторного назначения, они могут оказаться неспособными получить к ней доступ при наличии правильного кода.
Кроме того - позволяя себе верить второй метод имеет тот же эффект, вы можете захотеть сделать что-то вроде:
module.exports = {
functionName1
};
// code, code, code
module.exports = {
functionName2
};
Что будет, очевидно, лишить вас доступ к исходной functionName1
методы.
Конечно, вы можете добавить обе функции к новому объекту в одно и то же время, но что, если они просто недоступны в вашей области действия (например, они были определены внутри другой функции)? Вам все равно придется использовать 1-й метод в любом случае в то время, когда функция доступна.
Оба метода, очевидно, работают. Я рекомендую 1-й, поскольку для меня это более ясное и менее подверженное ошибкам.
Однако
С this
это зависит от контекста, отбрось все это вместе и придерживаться module.exports
.Вы будете в конечном итоге с чем-то вроде:
module.exports.functionName = function(params) {
//do something
};
или
function mySimpleFunction(params){
//do something
}
module.exports.functionName = mySimpleFunction;
(в случае, если ваша проблема была с ассоциирования объявленной функции)
Вы говорите, что модификация 'module.exports', например, во втором примере, может повлиять на другие несвязанные модули, которые вытягиваете с помощью' require'? это звучит так, как будто вы говорите ... если нет, и вы имеете в виду только внутри этого модуля, то да, я думаю, это может произойти, но ... это похоже на то, что вы не используете переменные, потому что вы можете случайно их повторно использовать. –
Нет, я говорю, что это повлияет на доступ к методам, доступным в том же модуле на объекте "module.exports", но до его переназначения. Это не похоже на то, что «не используйте переменные, поскольку вы можете их повторно использовать», поскольку основная проблема здесь заключается не в том, что «module.exports» изменен, но что объект, возвращенный требующему модулю, изменяется. Если бы я должен был добавить свою собственную функцию в «module.exports», я бы ожидал, что она будет доступна, когда потребуется модуль. –
... uhm. да, тогда это похоже на то, что вы не используете переменные, потому что можете забыть и использовать их повторно. –