有人進一步改進了模塊模式,即在返回對象之前加入對其增強的代碼。這種增強的模塊模式適合那些單例必須是某種類型和的實例,同時還必須添加某些屬性和(或)方法對其加以增強的情況。
var singleton = function() {
// 私有變量和私有函數
var privateVariable = 10;
function privateFunction() {
return false;
}
// 創建對象
var object = new CustomType();
// 添加特權/公有屬性和方法
object.publicProperty = true;
object.publicMethod = function() {
privateVariable++;
return privateFunction();
}
return object;
}
如果 application 對象必須是 BaseComponent (不用去關心 BaseComponent 代碼是如何實現的) 實例:
var application = function() {
// 私有變量和函數
var components = new Array();
// 初始化
components.push(new BaseComponent());
// 創建 application 的一個副本
var app = new BaseComponent();
app.getComponentCount = function() {
return components.length;
}
app.registerComponent: function(component) {
if(typeof component == "object") {
components.push(component);
}
}
// 公共
return app;
}();
在這個重寫后的應用程序(application)單例中,首先也是像前面例子中一樣定義了私有變量。主要不同之處在于命名變量 app 的創建過程,因為它必須是 BaseComponent 的實例。
這個實例實際上是 application 對象的局部變量版。此后,我們又為 app 對象添加了能夠訪問私有變量的公有方法。
最后一步是返回 app 對象,結果仍然是將它賦值給全局變量 application。