我一直在尝试在多个文件中使用单个 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;
我正在单独的 Node 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 对象。
提前致谢......
那么任何人都可以提出任何建议来实现上述功能吗?
最佳答案
问题是您正在独立运行 test.js 和 test2.js。
当您执行 test.js 时,它会创建一个全局上下文,其中 obj 绑定(bind)到 test.js 的全局范围。
执行完成后,该上下文将被销毁,并为 test2.js 创建一个新的上下文。因此,getInstance
函数内的 instance
变量找不到该实例并创建了一个新实例。
要正确使用单一模式,您需要使用相同的 singleton
变量来获取实例。
因此,一旦您使用singleton
创建了
var singleton = require('./mySingleton');
您只需使用此变量即可获取所有实例。由于单例属性是由于匿名函数的执行关闭而产生的,该函数将对象返回给 mySingleton
关于node.js - 访问多个 Node.js 文件的单个 JavaScript 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27916600/