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、分支比较少的情况。