子模塊的寫法:
function SVN(){ console.log('svn initialized'); return this; } function getInstance() { console.log('getInstance'); return new SVN(); } module.exports = SVN; module.exports.getInstance = getInstance;
這里定義了一個模塊叫SVN,可以通過兩種方式把這個模塊的方法公開給外界調用。
一個是賦值給module.exports,另外一個就是設置exports的屬性。
使用時:
var SVN = require('./lib/svn.js'); var svn1 = new SVN(); var svn2 = SVN.getInstance();
svn1和svn2就分別對應上述的兩種公開方式。
我覺得習慣上,如果這個模塊就是一個類,那么用第一種方法比較合適;如果這個就是一個工具庫,只是靜態函數,那么用第二個方式;如果這個模塊其實包含很多個類,那么還是第二個方式,這個模塊就變了一個包(package)或者說命名空間,例如:
搞個define.js,假設person.js導出了一個Person類,animal.js導出一個Animal類
module.exports.Person = require('./person.js');
module.exports.Animal = require('./animal.js');
使用時:
var define = require('./define.js'); var person = new define.Person(); var animal = new define.Animal();
嗯,非常有面向對象的感覺。。。咳咳,自從很久很久以前用過java后,這種類、包的思維就固化了,真不知道是好事還是壞事。。。