[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
- 方法重写和方法重载
- 移动端
- 响应式布局开发基础
- 项目一:创意简历