惰性模式(layier):减少每次代码执行时的重复性的分支判断,通过对对象重定义来屏蔽原对象中的分支判断。
//单体模式定义命名空间
var A ={}
A.on = function(dom,type,fn){
if(dom.addEventListener){
dom.addEventListener(type,fn,false);
}else if(dom.attachEvent){
dom.attachEvent('on'+type,fn);
}else{
dom['on'+type] = fn;
}
}
为元素添加事件时,总是做一遍能力检测,在同一个浏览器执行两次方法,是不会走不同的分支的。采用惰性模式来解决减少函数执行时的重复性分支判断。惰性模式有两种实现方式:1.第一种是在文件加载进来时通过闭包执行该方法对其重新定义,不过会使得页面加载时占用一定的资源。2.第二种是在第一种方式基础上做一次延时执行,在函数第一次调用的时候对其重定义。好处是减少文件加载时的资源消耗,但是在第一次执行有一定的资源消耗,所以是一种对消耗的惰性推移。
1.第一种方法使用加载即执行,在原先的基础上在分支判断中直接return退出循环。
var A ={}
A.on = function(dom,type,fn){
if(dom.addEventListener){
return function(dom,type,fn){
dom.addEventListener(type,fn,false);
}
}else if(dom.attachEvent){
return function(dom,type,fn){
dom.attachEvent('on'+type,fn);
}
}else{
return function(dom,type,fn){
dom['on'+type] = fn;
}
}
}();
2.惰性执行,对dom执行能力检测并显示重写,在函数最末尾重新执行一遍来绑定事件,不过在文件加载后A.on方法还没能重新被蒂尼工艺,直到某一元素绑定事件时,A.on才能被重新定义
var A ={}
A.on = function(dom,type,fn){
if(dom.addEventListener){
A.on = function(dom,type,fn){
dom.addEventListener(type,fn,false);
}
}else if(dom.attachEvent){
A.on = function(dom,type,fn){
dom.attachEvent('on'+type,fn);
}
}else{
A.on = function(dom,type,fn){
dom['on'+type] = fn;
}
}
//执行重定义on方法
A.on(dom,type,fn);
};
惰性模式是一种拖延模式,由于对象的创建或者数据的计算会花费高昂的代价,因此页面会延迟对这一类对象的创建。