如何跨文件编写单例节点模块?

时间:2016-12-13 10:13:34

标签: javascript node.js

这可能是一个愚蠢的问题,但我想向我自己澄清这些事情并得到其他意见。

假设我有一个像这样的节点文件var x=0; module.exports = init = function(someValue){ if(someValue) x=someValue; } init.prototype.getX = function(){ return x; }

y.js

让我说var X = require('x')(10); X.getX() //this will return 10 right? 就像这样。

z.js

但我的问题是,如果我的var X = require('x')(); //what will x.getX(); returns? 文件包含以下内容。

y.js

返回10,因为在index.php css -- main.css 文件上设置了10或0?

我应该以什么方式编写代码以使其在文件中单例化(如果可能的话,没有数据库)?

1 个答案:

答案 0 :(得分:1)

节点JS缓存模块,因此每次都会加载相同的模块,因为节点JS已经将所有模块包装成单例。

因此,如果您已加载z.js

,则y.js将返回10

如果你真的想使用单身(why not dependency injection),那么这是一个很好的方法。

更新:我认为您要导出构造函数,因此您必须使用新关键字,将y.js更改为

var X = require('x')(10);
var instanceOfX = new X();
instanceOfX.getX() //this will return 10 definitely and focus on new operator

并同样更新z.js