javascript是一門精巧的語言,可大可小,可伸可縮,如意金箍棒一般,運用恰當,可敵千夫。比如一個場景,有的人要寫上百行代碼,但是有的人寥寥幾筆即可實現,思路就在彈指間。要想學好一門語言,就要掌握其要義,歸納其精髓,方可如魚得水,運籌帷幄。
js在開發大型組件庫的時候經常會碰到很多的邏輯分支情況。比如博客園的編輯框編寫:
if(target === "font"){ someFunction(){...} } else if(target === "code"){ someFunction(){...} } else if(target === "table"){ someFunction(){...} } else if(target === "images"){ someFunction(){...} } else if(target === "link"){ someFunction(){...} } else if(target === "file"){ someFunction(){...} }
為了邏輯清晰當然也可以這樣寫:
switch(target){ case : "font" : someFunction(){...} break; case : "code" : someFunction(){...} break; case : "table" : someFunction(){...} break; case : "images" : someFunction(){...} break; case : "link" : someFunction(){...} break;
case : "file" : someFunction(){...} break;
}
當然這樣的一層邏輯很容易書寫和維護,但是,如果碰到下面還有多重分支的情況改如何處理呢,大部分人都是繼續if else或者switch case。於是代碼就變的越來越長,越來越難維護。就像下面的代碼一樣:
switch(target){ case : "font" : someFunction(){...} break; case : "code" : switch(code){ case : "java" : someFunction(){...} break; case : "c" : someFunction(){...} break; case : "c++" : someFunction(){...} break; } break; case : "table" : someFunction(){...} break; case : "images" : someFunction(){...} break; case : "link" : someFunction(){...} break; case : "file" : someFunction(){...} break; }
js是一門面向對象的語言,我們能不能用面向對象的思想來解決這個問題呢?請看下面的源碼:
editor = { "font" : function(){...} "code" : function(){...} "table" : function(){...} "images" : function(){...} "file" : function(){...} } editor[target]();
這樣是不是清晰明了了很多?而且效率也肯定提升了,因為是對象直接尋址。
大致思路如下:
先創建一個對象,把所有的判斷分支都放到這個對象里,然后再調用。
那么是么時候需要用這個方法,什么時候不需要用呢?
先說需要用的:
一、在判斷分支很多的情況下建議使用。條理清晰。
二、在分支里的邏輯很復雜的情況下,可以起到邏輯拆分的作用。
再說不需要用的情況:
一、簡單的邏輯判斷。
二、分支比較少的情況。