javaScript一種最佳化模式-初始化時分支,javascript初始化
初始化時分支是一種最佳化模式。當知道某個條件在整個程式生命週期內都不會發生改變的時候,僅對該條件測試一次是很有意義的,瀏覽器嗅探(功能檢測)就是一個典型的例子。
2.查明DOM元素的計算樣式或者附加的事件處理常式是另外一個可以受益於初始化時分支模式的情境。如下例子:
最佳化前:
var utils ={ addListener:function(el,type,fn){ if(typeof window.addEventListener ==='function'){ el.addEventListener(type,fn,false); } else if(typeof document.attachEvent ==='function'){ el.attachEvent('on'+type,fn); } else{ el['on'+type]=fn; } }, removeListener:function(el,type,fn){ if(typeof window.removeEventListener ==='function'){ el.removeEventListener(type,fn,false); } else if(typeof document.detachEvent ==='function'){ el.detachEvent('on'+type,fn); } else{ el['on'+type]=null; } }};
上面這段代碼效率比較低下,每次在調用 utils.addListener()或者 utils.removeListener()的時候,都會重複執行相同的檢查,如果使用初始化時分支,可以在指令碼初始化載入時候一次性探測出瀏覽器特徵。此外,可以在整個頁面生命週期內重定義函數的運行方式。如下:
var utils = { addListener:null, removeListener:null};if(typeof window.addEventListener ==='function'){ utils.addListener=function(el,type,fn){ el.addEventListener(type,fn,false); }; utils.removeListener=function(el,type,fn){ el.removeEventListener(type,fn,false); };} else if(typeof document.attachEvent ==='function'){ utils.addListener=function(el,type,fn){ el.attachEvent('on'+type,fn); }; utils.removeListener=function(el,type,fn){ el.detachEvent('on'+type,fn); };} else{ utils.addListener=function(el,type,fn){ el['on'+type]=fn; }; utils.removeListener=function(el,type,fn){ el['on'+type]=null; };}
當使用這個模式時,請不要過度假設瀏覽器特徵。