模块模式
使用场景:进行封装时
//立即执行函数
var Person= (function(){
//执行部分
var prams
function(){}
//暴露接口
return{
}
})()
【常见设计模式】立即执行函数具有私有作用域,可以将执行代码封装,然后通过return来提供接口
工厂模式 使用场景:只需要简单的创建一个对象
function createPerson(opts){
var person={}
person.action1: function(){}
return person;
}
基础版的构造函数模式(无法通过instance of 获得其创建者),使用时直接传入参数获得对象。
var p1 = createPerson(opts)
构造函数模式 使用场景:一个组件,需要有独立的功能,稍微复杂时
function Person(){
this.pram1
this.pram2
}
Person.prototype.xxx=
使用函数和原型链构造一个类,使用时通过new来创建新的实例对象
混合模式 使用场景:涉及到继承时
即构造函数模式及其继承的实现
实现继承的方法有
http://www.jianshu.com/p/d18471b1064a
- 使用prototype,并利用空对象作为中介
- 拷贝继承
- Object.create
var Pepple =(function(){
//私有变量及方法
var instance;
function init() {
//define&do something
return{
}
}
//公有变量和方法
return{
//确保只有一个实例
createPeople:function(){
if(!instance){
instance = init();
}
return instance;
}
}()) //obj1和obj2是相等的
var obj1 = People.getInstance()
var obj2 = People.getInstance()
发布订阅模式
var Eventcenter =(function(){
var events = {}
function on(evt,handler){
events[evt] = events[evt] || [];
//初始化为数组,以便加入多个handler
events[evt].push({
handler:handler
})
}function one(evt,handler){
events[evt] = events[evt] || [];
events[evt].push({
handler:handler,
one:true
}
})
}
function off(evt,handler){
if (!handler){
events[evt] = []
}else{
events[evt].remove({handler:handler},1)||events[evt].remove({handler:handler,one:true},1)
}
}
function fire(evt,args){
if(!events[evt]){
return;
}
for(var i=0;
i