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

标签 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;

我正在单独的 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/

相关文章:

mysql - 如何将一些表信息插入到另一个表列中?

node.js - 构建聊天应用程序、NodeJS 和 Express - 我应该使用什么来进行媒体流?

javascript - 为什么我在 node.js 中得到这个奇怪的 "Cannot set property of undefined"

C:避免链表中的垃圾值

javascript - 在 mouseenter generateLegend Chartjs 2 上突出显示 donut 段

javascript - 使用 graphql-yoga 的子字段上的 Graphql 错误

java - 链表的 add() 方法

java - 节点、队列、出队

javascript - setInterval不是每秒刷新数据

javascript - 检测悬停在选定文本上