Module模式最初被定義爲一種在傳統軟件工程中爲類提供私有和共有封裝的方法。segmentfault
經過這種方式,可以使一個單獨的對象擁有共有/私有方法和變量,從而屏蔽來自全局做用局的特殊部分。
產生的結果是: 函數名與在頁面上其餘腳本定義的函數衝突的可能性降級設計模式
實現一個簡單的計數器閉包
orderModule外的代碼沒法直接讀取getNum(),addNum()和subNum(),orderNum變量其實是與全局做用域隔離的,所以它表現的就像是一個四有變量,他的存在被侷限於模塊的閉包內,所以惟一能訪問其做用域的代碼就是這三個函數。函數
這樣實現同時也進行了有效的命名空間設置。設計
var orderModule = (function() { var orderNum = 1; return { getNum: function() { return orderNum; }, addNum: function() { orderNum = orderNum + 1; }, subNum: function() { orderNum = orderNum > 1 ? orderNum - 1 : orderNum; } } })(); orderModule.getNum();
揭示模塊模式是在模塊模式的基礎上進行改進,在私有範圍內簡單定義全部的函數和變量,並返回一個匿名對象,它擁有指向私有函數的指針,該函數是展現爲共有的方法。指針
var orderModule = (function() { var orderNum = 1; function getNum() { return orderNum; } function addNum() { orderNum = orderNum + 1; } function subNum() { orderNum = orderNum > 1 ? orderNum - 1 : orderNum; } //將暴露的公有指針指向到私有函數和屬性上 return { get: getNum, add: addNum, sub: subNum } })(); orderModule.get();
《JavaScript設計模式》code
JS設計模式之Factory(工廠)模式
JS設計模式之Singleton(單例)模式
JS設計模式之Facade(外觀)模式
JS設計模式之Module(模塊)模式、Revealing Module(揭示模塊)模式對象