初始化时分支,也称加载时分支是一种优化模式,当知道某个条件在整个程序生命周期内不会发生改变的时候,进队该条件测试一次是很有意义的。以事件监听代码为例: 1 var utils={ 2 addListener: function (el, type, fn) { 3 if(t ...
初始化时分支,也称加载时分支是一种优化模式,当知道某个条件在整个程序生命周期内不会发生改变的时候,进队该条件测试一次是很有意义的。
以事件监听代码为例:
1 var utils={ 2 addListener: function (el, type, fn) { 3 if(typeof window.addEventListener==="function"){ 4 el.addEventListener(type,fn,false); 5 }else if(typeof window.attachEvent==="function"){ //IE浏览器 6 el.attachEvent("on"+type,fn); 7 }else{ //更早版本浏览器 8 el["on"+type]=fn; 9 }10 },11 removeListener: function (el, type, fn) {12 if(typeof window.removeEventListener==="function"){13 el.removeEventListener(type,fn,false);14 }else if(typeof window.detachEvent==="function"){15 el.detachEvent("on"+type,fn);16 }else{17 el["on"+type]=null;18 }19 }20 };
以上代码的问题在于效率比较低下,每次在调用addListener()或removeListener()时,都会重复地执行相同的检查
当使用初始化时分支的时候,可以在脚本初始化加载时一次性探测出浏览器特征。
修改后的代码如下:
1 var utils={ 2 addListener:null, 3 removeListener:null 4 }; 5 if(typeof window.addEventListener==="function"){ 6 utils.addListener= function (el, type, fn) { 7 el.addEventListener(type,fn,false); 8 }; 9 utils.removeListener= function (el, type, fn) {10 el.removeEventListener(type,fn,false);11 };12 }else if(typeof window.attachEvent==="function"){13 utils.addListener= function (el, type, fn) {14 el.attachEvent("on"+type,fn);15 };16 utils.removeListener= function (el, type, fn) {17 el.detachEvent("on"+type,fn);18 };19 }else{20 utils.addListener= function (el, type, fn) {21 el["on"+type]=fn;22 };23 utils.removeListener= function (el, type, fn) {24 el["on"+type]=null;25 };26 }
分开嗅探浏览器特征,然后使用加载时分支仅执行一次嗅探。
原标题:优化模式
关键词:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。