[toc]
## 單例模式(singleton-pattern)
>在真實項目中,為了實現模塊化開發或則團隊協作開發,我們經常應用單例模式(一般業務邏輯部分的代碼都是依托單例模式設計規劃的)
### 單例模式的由來
很早以前,JS中都是值類型,沒有引用數據類型
```
var name = '克里斯';
var age = 13;
var sex = 'female';
var name = '安吉拉'; //會替換掉克里斯
var age = 6; //會替換掉13
var sex = 'unkonwn'; //會替換掉female
```
so,如果后面編寫的代碼,穿件的變量或則函數名和之前一樣,會把之前存儲的值替換掉。真實項目中,團隊協作開發,如果是這樣來處理,經常會導致彼此的代碼沖突(`全局變量污染`,`全局變量沖突`);
后來JS中又誕生了對象數據類型,解決了上面的污染或則沖突問題。
#### 對象數據類型
對象:把描述同一件事務的特征或則屬性,進行歸納匯總(放在一起),依次來避免全局變量之間的沖突。
```
var person1 = {
name:'克里斯'
,age:13
,sex:'female'
};
var person2 = {
name:'安吉拉'
,age:6
,sex:'unkonwn'
};
person1.age
person2.age
```
單例模式就是一個破對象(從代碼角度來講)
我們把對象數據類型實現 把描述同一件事務的屬性或則特征匯總在一起,以此避免全局變量沖突問題的方式和思想叫做:`單例設計模式`。
#### 命名空間
singleton不僅僅是對象名了,在單例模式中,singleton稱之為 `命名空間(name-space)`
之所以叫這個名字,
對象類型會開辟一個空間,這個空間是個堆內存空間,它會返回一個地址,我們也可以把這個名字當做這個空間的名字,故稱之為命名空間。
```
var singleton = {
xxx:xxx,
...
}
```
把描述同一件事務的屬性或則方法存放在某一個命名空間下,多個命名空間中的屬性和方法是互不干擾的。
命名空間可以嵌套
```
var singleton = {
nameSpace1:{
xxx:xxx,
...
}
,nameSpace2:{
xxx:xxx,
...
}
...
};
```
### 使用單例模式進行模塊化開發
>模塊化開發:在團隊協作開發的時候,我們經常會把一個復雜頁面,按照具體的功能劃分成為幾大塊,然后分別去開發,這種模塊劃分的思想就是模塊化開發思想。
>
>真實項目中,我們可以使用單例模式(建議也是使用單例模式)來實現模塊化開發
```
//=>項目主管(或則所有開發人員):公共模塊
var utils = {
trim:function(){}
};
//=>克里斯:搜索模塊
var searchModule = {
submit:function(){
utils.trim();
}
};
//=>安吉拉:天氣模塊
var weatherModule = {
setWeather:function(){}
};
//=>克里斯蒂娜:頻道模塊
var channelModule = {
show:function(){
//=>在當前命名空間想要調取其它命名空間的方法:指定好對應的命名空間名字即可,使用[NameSpace].[property]就可以操作了
searchModule.submit();
//=>調取本模塊中的一些方法,可以直接使用THIS處理即可,此方法中的THIS一般都是當前模塊命名空間
//channelModule.setChannel();
this.setChannel();
}
,setChannel:function(){}
};
channelModule.show();
```
- 空白目錄
- window
- location
- history
- DOM
- 什么是DOM
- JS盒子模型
- 13個核心屬性
- DOM優化
- 回流與重繪
- 未整理
- 文檔碎片
- DOM映射機制
- DOM庫封裝
- 事件
- 功能組件
- table
- 圖片延遲加載
- 跑馬燈
- 回到頂部
- 選項卡
- 鼠標跟隨
- 放大鏡
- 搜索
- 多級菜單
- 拖拽
- 瀑布流
- 數據類型的核心操作原理
- 變量提升
- 閉包(scope)
- this
- 練習題
- 各種數據類型下的常用方法
- JSON
- 數組
- object
- oop
- 單例模式
- 高級單例模式
- JS中常用的內置類
- 基于面向對象創建數據值
- 原型和原型鏈
- 可枚舉和不可枚舉
- Object.create
- 繼承的六種方式
- ES6下一代js標準
- babel
- 箭頭函數
- 對象
- es6勉強筆記
- 流程控制
- switch
- Ajax
- eval和()括號表達式
- 異常信息捕獲
- 邏輯與和或以及前后自增
- JS中的異步編程思想
- 上云
- 優化技巧
- 跨域與JSONP
- 其它跨域相關問題
- console
- HTML、XHTML、XML
- jQuery
- zepto
- 方法重寫和方法重載
- 移動端
- 響應式布局開發基礎
- 項目一:創意簡歷