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]();
清晰易懂多了以,效率也肯定提升了,因为是对象直接寻址。
这里给出思路:
先创建一个对象,把所有的判断分支都放到这个对象里,然后再调用。
这种方法在何时需要或不需要呢?
需要:
1、在判断分支很多的情况下建议使用。条理清晰。
2、在分支里的逻辑很复杂的情况下,可以起到逻辑拆分的作用。
不需要用的情况:
1、简单的逻辑判断。
2、分支比较少的情况。