我一直在尝试在多个文件中使用单个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对象。
提前致谢....
所以任何人都可以提出任何建议来实现上述功能。
答案 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时,您将单独调用它们,这将无法正常工作。您正在创建一个新的运行时变量:
如果您要将它们包含在主程序包中并运行它,您会发现它运行正常: