Я наткнулся на этот пост, и хотя принятый ответ показывает, что это Singleton, мой ответ на оригинальный вопрос «В Node.js я создаю новый объект, когда« Требуется »?»это «это зависит».
ответ / логика murvinlai по-прежнему верна в последних версиях Node (v0.10.18 на момент написания этой статьи), но это если у вас есть необходимые настройки файлов.Например, и я пытаюсь использовать более подробный пример, чтобы избежать путаницы, если у вас был следующий код «Пользователь» в User.js (структура отличается от ответа Мурвинлаи)
/**
* User Model
*/
function modelUser() {
var User = {
/**
* User::_id
*
* @var integer
*/
"_id" : null,
/**
* Set id
*
* @param integer id
* @return User
*/
"setId" : function(id)
{
User._id = id;
return User;
},
/**
* Get id
*
* @return integer
*/
"getId" : function()
{
return User._id;
},
}
return User;
}
exports.modelUser = modelUser;
Теперь, если вы взяли приведенный выше код, вы можете обнаружить, что во многих случаях без изменений у вас не возникнет проблема синглтона.IE с:
var user1 = require("./application/models/User.js").modelUser(); // In one module
var user2 = require("./application/models/User.js").modelUser(); // In another module
user1.setId(1);
console.log(user1.getId());
console.log(user2.getId());
Вы получите 1, ноль.Кроме того, и я даже не уверен, что вам это понадобится, но вы можете использовать новый оператор по требованию (поскольку по сути это просто возврат функции).IE с:
var user1 = new require("./application/models/User.js").modelUser(); // In one module
var user2 = new require("./application/models/User.js").modelUser(); // In another module
user1.setId(1);
console.log(user1.getId());
console.log(user2.getId());
И вы получите тот же результат.
Опять же, первоначальный вопрос был немного широким (и проблемы, возможно, в конечном итоге были с мангустом (как упоминалось в #3 ответа Мурвинлаи), но вышеприведенный пример является примером другого способа сделать что-то для получения нового объекта из каждого из require (). Теперь вы можете подумать, прежде чем делать это, так как бывают моменты, когдавам понадобится Singleton (скажем, для хранения кэшированных значений в ORM / Mapper), но в заключение вы создаете новый объект, это зависит ..