模式:经过实践证明,有通用性的,优秀的解决方案。
# 编程模式
* 行为隔离
* 命名空间
* 初始化分支
* 延迟定义
* 配置对象
* 私有变量和方法
* 特权方法
* 私有函数的共有化
* 自执行的方法
* 链式调用
* JSON
*****
## 行为隔离
* 内容HTML
> 尽量避免在HTML标签中使用样式类的属性
> 不要使用与外观有关的HTML标签
> 尽量根据语义需要来选择标签
* 外观CSS
> 对浏览器默认的绘制行为进行重置
* 行为JavaScript
> 尽可能少用\<script\>标签
> 尽量不要使用内嵌事件的处理方法
> 尽量不要使用CSS表达式
> 在内容末尾、body标签之前,插入js文件
## 命名空间
避免命名冲突
## 初始化分支
在模块初始化的过程中就将部分代码进行分支处理,效率更高。
应该单独检测每个可能会用到的浏览器特性。
## 延迟定义
相关函数只有在被调用时,才会执行,使初始化过程更为轻量。
## 配置对象
参数过多时,使用配置型参数,优点:
* 不用考虑参数的顺序
* 可以跳过某些参数的设置
* 函数的扩展性更强
* 代码的可读性更好
## 私有属性和方法
利用构造器函数来实现
## 特权函数
可以通过他们访问对象的私有方法或属性
## 私有函数公有化
不让外界修改,但是希望外部代码访问
```
var _setStyle = function(){}
var _getStyle = function(){}
return {
setStyle: _setStyle,
getStyle: _getStyle
}
```
## 自执行函数
保证全局命名空间不被污染
适用于某些脚本加载时执行一次性初始化任务
## 链式调用
## JSON
# 设计模式
* 创建型模式:设计对象的创建与初始化
* 结构性模式:描述了如何组合对象以提供新的功能
* 行为型模式:描述了对象之间如何通信
* 单例模式
```
// 最基本的形式,对象文本标识法
var single = {}
```
* 工厂模式
```
// 全局变量
function Logger(){
if(typeof global_log === 'undefined'){
global_log = this;
}
return global_log;
}
var a = new Logger();
var b = new Logger();
alert(a === b);
// 构造器属性
function Logger(){
if(typeof Logger.single_instance === 'undefined'){
Logger.single_instance = this;
}
return Logger.single_instance;
}
```
* 装饰器模式
* 观察者模式