if else太冗长了,有什么好方法可以优化下吗?自己想了好久没想出来。            Move:function(){
                var p = arguments[0];
                var  = p.getAttribute("").split("=");
                var i = parseInt([0]);
                var j = parseInt([1]);
                var direction,time,distance;
                if(j+1<this.mapSizeX&&this.Map[i][j+1]=="no"){
                    direction="rightleft";
                    distance=this.imgWidth;
                    this.Map[i][j+1]=this.Map[i][j];
                    this.Map[i][j]="no";
                    j=j+1;
                }
                else if(j-1>=0&&this.Map[i][j-1]=="no"){
                    direction="rightleft";
                    distance=-this.imgWidth;
                    this.Map[i][j-1]=this.Map[i][j];
                    this.Map[i][j]="no";
                    j=j-1
                }
                else if(i+1<this.mapSizeY&&this.Map[i+1][j]=="no"){
                    direction="bottomtop";
                    distance=this.imgHeight;
                    this.Map[i+1][j]=this.Map[i][j];
                    this.Map[i][j]="no";
                    i=i+1
                }
                else if(i-1>=0&&this.Map[i-1][j]=="no"){
                    direction="bottomtop";
                    distance=-this.imgHeight;
                    this.Map[i-1][j]=this.Map[i][j];
                    this.Map[i][j]="no";
                    i=i-1
                }
                this.Change(p,direction,distance,i,j);
                this.PrintMap();
            },

解决方案 »

  1.   

    你呀,真是的
    将这个if ........else
    修改成
    switch(变量)
    {
      case 值1:
       {
       }
      case 值2:
       {
       }
      default:
       {
       }
    }
      

  2.   

       把变得值 封装成参数  传到一个函数里面,  然后要 返回一个数组 .. 我说的是这段   direction="bottomtop";
                        distance=-this.imgHeight;
                        this.Map[i-1][j]=this.Map[i][j];
                        this.Map[i][j]="no";
                        i=i-1
      

  3.   

    楼主这段代码没法优化 问题因为你的判断条件依赖你的业务逻辑 且没有共同性质
    其实也无需优化 不会存在什么性能问题 也没有什么循环的东西在里边 无非就是给人感觉代码相似度有些高但是有一点 虽然这里this我不知道楼主具体代码中指代什么 但是可以把分支里的this.什么什么都提出来作为一个局部变量 以减少每次判断条件中对属性的查找时间 如果你的代码确实有性能问题 那楼主不妨一试
      

  4.   

    最好用一个局部变量来缓存this.Map,其他好像不需要怎么改
      

  5.   


    ,bind:function (td){
    if(td.className=='p0')return;/* 如果点击的是空白网格,则忽视 */
    function V(x){return x>-1&&x<3};
    var x=td.cellIndex,y=td.parentNode.rowIndex,$=this.map.rows
    ,$$=[
    V(y-1)&&$[y-1].cells[x]
    ,V(x+1)&&$[y].cells[x+1]
    ,V(y+1)&&$[y+1].cells[x]
    ,V(x-1)&&$[y].cells[x-1]
    ];
    for (var i=0;i<$$.length;i++ )/* 测试是否可以移动网格 */
    if($$[i]&&$$[i].className=='p0')
    return this.move(td,$$[i]);
    }
    上面这段代码
    if($$[i]&&$$[i].className=='p0')
    这里不是很明白。为什么$$[i]可以获取className?
    V(y-1)&&$[y-1].cells[x]
    这种不是返回true或false吗?
      

  6.   

    首先在js的逻辑运算中0、""、null、false、undefined、NaN都会为false
    在逻辑运算中,并不会把一些非bool类型的参数强制转换为bool类型
    在看下面的alert(true&&"aa");//aa
    alert(false&&"aa");//false
    alert(true||"aa");//true
    alert(false||"aa");//aa