有人進(jìn)一步改進(jìn)了模塊模式畅涂,即在返回對(duì)象之前加入對(duì)其增強(qiáng)的代碼霜运。這種增強(qiáng)的模塊模式適合那些單例必須是某種類型和的實(shí)例宛琅,同時(shí)還必須添加某些屬性和(或)方法對(duì)其加以增強(qiáng)的情況橘沥。
var singleton = function() {
// 私有變量和私有函數(shù)
var privateVariable = 10;
function privateFunction() {
return false;
}
// 創(chuàng)建對(duì)象
var object = new CustomType();
// 添加特權(quán)/公有屬性和方法
object.publicProperty = true;
object.publicMethod = function() {
privateVariable++;
return privateFunction();
}
return object;
}
如果 application 對(duì)象必須是 BaseComponent (不用去關(guān)心 BaseComponent 代碼是如何實(shí)現(xiàn)的) 實(shí)例:
var application = function() {
// 私有變量和函數(shù)
var components = new Array();
// 初始化
components.push(new BaseComponent());
// 創(chuàng)建 application 的一個(gè)副本
var app = new BaseComponent();
app.getComponentCount = function() {
return components.length;
}
app.registerComponent: function(component) {
if(typeof component == "object") {
components.push(component);
}
}
// 公共
return app;
}();
在這個(gè)重寫(xiě)后的應(yīng)用程序(application)單例中,首先也是像前面例子中一樣定義了私有變量夯秃。主要不同之處在于命名變量 app 的創(chuàng)建過(guò)程,因?yàn)樗仨毷?BaseComponent 的實(shí)例痢艺。
這個(gè)實(shí)例實(shí)際上是 application 對(duì)象的局部變量版仓洼。此后,我們又為 app 對(duì)象添加了能夠訪問(wèn)私有變量的公有方法堤舒。
最后一步是返回 app 對(duì)象色建,結(jié)果仍然是將它賦值給全局變量 application。