gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:42 25 4
gpt4 key购买 nike

我一直在尝试在多个文件中使用单个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com