<script type="text/javascript">
   
   //简单单体模式
   var singleton={
    attr1:10,
    attr2:true,
    method1:function(){console.log('method1 ...')},
    method2:function(){console.log('method2 ...')}
   }
   
   console.log(singleton.attr1)
   singleton.method1()
   
   //划分命名空间
   var nameSpace1={}
   nameSpace1.singleton1={
    attr1:10,
    attr2:true,
    method1:function(){console.log('method1 ...')},
    method2:function(){console.log('method2 ...')}
   }
   nameSpace1.singleton2={
    attr1:10,
    attr2:true,
    attr3:'hello singleton',
    method1:function(){console.log('method1 ...')},
   }
   
   //借用闭包创建单体,闭包主要用于保护数据
   //命名空间
   var nameSpace2={}
   nameSpace2.singleton=(function(){
    //浏览器运行后,立即执行:私有成员变量
    var name='cxiong'
    var age=29
    var addr='beijing'
    var interest1=function(){console.log('coding ...')}
    var interest2=function(){console.log('play compute game ...')}
    
    //把块级作用域中的执行结果返回    
    return {
     name:name,
     age:age,
     addr:addr,
     int1:function(){interest1()},
     int2:function(){interest2()}
    }
   })()
   
   nameSpace2.singleton.name='mm'
   console.log(nameSpace2.singleton.name)
   console.log(nameSpace2.singleton.age)   
   nameSpace2.singleton.int1()
  </script>
  
  
   //分支单体
   //判断程序的分支,如浏览器差异检测
   var Ext={}
   var def=false
   Ext.More=(function(){
    var ff={
     attr1:'ff'
    }
    var ie={
     attr1:'ie7'
    }
    return (def)?ff:ie
   })()
   console.log(Ext.More.attr1)