访问多个node.js文件的单个JavaScript对象?

时间:2015-01-13 07:06:48

标签: node.js nodes javascript

我一直在尝试在多个文件中使用单个JavaScript对象。为此我在JavaScript中选择了单例设计模式。

mySingleton.js

var mySingleton = (function () {
var instance;
function init() {
function privateMethod(){
    console.log( "I am private" );
}
var privateVariable = "Im also private";
var privateRandomNumber = Math.random();

return {

  publicProperty: "I am also public",
  publicMethod: function () {
    console.log( "The public can see me!" );
  },

  getRandomNumber: function() {
    return privateRandomNumber;
  }

  };

};

return { 

getInstance: function () {
  if ( !instance ) {
    instance = init();
    console.log("Newly creating an object");
  } 
  return instance;
} 
};
})();
module.exports = mySingleton;

我在一个单独的节点js文件中访问上述对象。如以下代码所示

test.js

var singleton = require('./mySingleton');
var obj = singleton.getInstance();
console.log(obj.publicProperty);
console.log('random number value:'+obj.getRandomNumber());

test2.js

var singleton = require('./mySingleton');
var obj = singleton.getInstance();
console.log(obj.publicProperty);
console.log('random number value:'+obj.getRandomNumber());

每次创建新的javascript对象时,我都会执行上述两个文件。但我想在多个文件中使用相同的JavaScript对象。

提前致谢....

所以任何人都可以提出任何建议来实现上述功能。

2 个答案:

答案 0 :(得分:0)

问题是您正在独立运行test.js和test2.js。 执行test.js时,它会创建一个全局上下文,其中obj绑定到test.js的全局范围。 执行完成后,将销毁该上下文并为test2.js创建新的上下文。因此instance函数内的getInstance变量找不到实例并创建一个新实例。 要正确使用单个模式,您需要使用相同的singleton变量来获取实例。

因此,一旦您使用

创建了singleton
var singleton = require('./mySingleton');

您只需要使用此变量获取所有实例。由于关闭执行将对象返回mySingleton

的匿名函数,因此产生单例属性

答案 1 :(得分:0)

您每次调用节点test.js时,您将单独调用它们,这将无法正常工作。您正在创建一个新的运行时变量:

如果您要将它们包含在主程序包中并运行它,您会发现它运行正常:

enter image description here