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