2012-02-01 192 views
10

爲了充分利用Node的模塊/ require()/ exports而努力做一些適當的OO編程。創建全局名稱空間並且不使用導出(如在客戶端js應用程序開發中)是否是一種好的做法?因此,在模塊(Namespace.Constructor.js):Node.js命名空間

Namespace = Namespace || {}; 
Namespace.Constructor = function() { 
    //initialise 
} 
Namespace.Constructor.prototype.publicMethod = function() { 
    // blah blah 
} 

...在調用文件只是用...

requires('Namespace.Constructor'); 
var object = new Namespace.Constructor(); 
object.publicMethod(); 

感謝

+3

使用'exports'或'module.exports'。您的模塊已經命名空間。只需按照[這些文檔](http://nodejs.org/docs/latest/api/modules.html)。 – nicerobot 2012-02-01 19:57:23

回答

16

在node.js的,模塊位置是命名空間,因此您不需要在代碼中使用名稱空間。我認爲這有一些問題,但它們是可以管理的。 Node只會公開您附加到module.exports對象的代碼和數據。

在您的例子,使用以下命令:

var Constructor = function() { 
    // initialize 
} 
Constructor.prototype.publicMethod = function() {} 
module.exports = Constructor; 

,然後在你的調用代碼:

var Constructor = require('./path/to/constructor.js'); 
var object = new Constructor(); 
object.publicMethod(); 
+1

但是,如果我們不使用var,則創建一個全局並可供調用者使用。那麼爲什麼我們需要使用出口? – hacklikecrack 2012-02-02 09:19:31

+1

避免名稱在全局空間中發生衝突。當然,你可以創建你自己的命名空間系統,但require()可以很好地工作,並且是node.js開發中的明確標準。 – 2012-02-03 00:18:36

+7

hacklikecrack:缺少模塊中的var不會創建可從調用方獲得的全局。節點會自動將您的模塊代碼封裝在一個函數中以防止這種情況發生 – 2012-12-11 16:34:17