2016-12-13 44 views
0

這可能是一個愚蠢的問題,但我想澄清這件事,我的自信心,並得到有關它的其他意見。如何跨文件編寫單例節點模塊?

比方說,我有一個節點文件x.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? 

做它返回10,因爲10是設置y.js文件或0?

以何種方式我應該寫的代碼,使其單跨文件(不包含數據庫如果可能的話)?

回答

1

節點JS緩存模塊所以每次相同模塊將被加載爲節點JS已經包裝在單件的所有模塊。

所以,是z.js將返回10提供您已經加載y.js

如果你真的想使用單(why not dependency injection),那麼這是一個很好的路要走。

更新:我看你是出口的構造,所以你必須使用new關鍵字,改變你的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同樣

+0

我想應該是這樣的這個'var X = require('x'); var x = new X();'然後'x.getX()'。相應地更新您的答案,我會接受的是作爲答案 – Miqe

+0

感謝您的答案,這真的很有幫助。 – Miqe

+0

@Miqe耶,這是更好的可讀性和所有。 – bugwheels94