这可能是一个愚蠢的问题,但我想向我自己澄清这些事情并得到其他意见。
假设我有一个像这样的节点文件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?
我应该以什么方式编写代码以使其在文件中单例化(如果可能的话,没有数据库)?
答案 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