外观模式(Facade):为一组复杂的子系统接口提供一个更高级的统一接口,通过这个接口使得对子系统接口的访问更容易。
定义一个统一接口方法,提供一个更见的高级接口,简化对复杂的底层接口不统一的使用需求。
对于一个页面文档绑定click事件容易被覆盖,即使用DOM0级,所以需要使用DOM2级的addEventListener来实现,当不可以使用时再使用0级进行绑定
//外观模式实现
function addEvent(dom,type,fn){
//对于支持DOM2级事件处理程序addEventListener方法的浏览器
if(dom.addEventListener){
dom.addEventListener(type,fn,false);
}
//对于不支持addEventListener但支持attachEvent方法的浏览器
else if{
dom.attachEvent('on'+type,fn);
}else{
//对于什么也不支持的浏览器
dom['on'+type] = fn;
}
}
//这样就可以对于支持DOM2级方法的浏览器安心绑定事件
//对于IE低版本浏览器不兼容e.preventDefault()和e.target也可以使用外观模式来解决
//获取事件对象
var getEvent = function(e){
return e || window.e;
}
//获取元素
var getTarget = function(e){
var event = getEvent(e);
return event.target || event.srcElement;
}
//阻止默认行为
var preventDefault = function(e){
var event = getEvent(e);
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false;
}
}
外观模式可以将浏览器不兼容的方法变得简单而又兼容各个浏览器,很多代码库中也是通过外观模式来封装多个功能,简化底层操作方法。