单体模式(singleton)类似 java 的单例
通常结合闭包(保护数据)来使用
简单单体
var Singleton = {
attr1: true ,
method1 : function(){
alert('我是方法1');
}
};
命名空间
var ext = {};
ext.Singleton = {
attr1: true ,
method1 : function(){
alert('我是方法1');
}
};
ext.Singleton.method1();
惰性单体
var Ext = {} ;
Ext.Base = (function(){
// 控制返回的单体对象
var uniqInstance ;
// 初始化单体对象
function init(){
var a1 = 10 ;
var fn1 = function(){alert('fn1')};
return {
attr1 : a1 ,
method1 : function(){
return fn1();
}
};
}
return {
getInstance : function(){
if(!uniqInstance){
uniqInstance = init();
}
return uniqInstance ;
}
};
})();
alert(Ext.Base.getInstance().attr1);
Ext.Base.getInstance().method1();
分支单体
例如:判断程序的分支 <浏览器差异的检测>
var Ext = {} ;
var def = false ;
Ext.More = (function(){
var objA = { // 火狐浏览器 内部的一些配置
attr1:'FF属性1'
};
var objB = { // IE浏览器 内部的一些配置
attr1:'IE属性1'
};
return (def) ? objA : objB;
})();
alert(Ext.More.attr1);