写过前端脚本的经常会遇到绑定事件方法,但是要交兼容IE浏览器和标准浏览器
例如:
var JsObject = {};
JsObject.on = function (dom,type,fn){
if(dom.addEventListener){//除去IE外的标准浏览器
dom.addEventListener(type,fn,false);
}else if(dom.attachEvent){//IE浏览器
dom.attachEvent('on'+type,fn);
}else{
dom['on' + type] = fn;
}
}
当每次执行JsObject 的on方法时,都会进行条件判断,很繁琐,当执行完一次后,再次执行时,怎么样能不需要判断呢?当执行完一次判断后我们可以重写 on 方法可以避免重复判断。
##方法1:利用闭包,加载立即执行##
JsObject.on = function (dom,type,fn){
if(dom.addEventListener){//除去IE外的标准浏览器
return function(dom,type,fn){
dom.addEvenetListener(type,fn,false);
}
}else if(dom.attachEvent){//IE浏览器
return function(dom,type,fn){
dom.attachEvent('on'+type,fn);
}
}else{
return function(dom,type,fn){
dom['on' + type] = fn;
}
}
}();
##方法2:是上述方法的延迟执行##
JsObject.on = function(dom,type,fn){
if(dom.addEventListener){
JsObject.on = function(dom,type,fn){
dom.addEventListener(type,fn,false);
}
}else if(dom.attachEvent){
JsObject.on = function(dom,type,fn){
dom.attachEvent('on'+type,fn);
}
}else{
JsObject.on = function(dom,type,fn){
dom['on' + type] = fn;
}
}
JsObject.on(dom,type,fn);
}
各人更倾向于使用第二种方案,此方案只有在调用此方法时候才执行,当没有使用此方法时,不占用浏览器内存