4
 var ifChecks = function( i )
 {
     if( i === 23 )
     {
       // implementation
     }
     else if ( i === 300 )
     {
       // implementation
     }
     else if ... 

  }

我在javascript代码中有这种长的if else链(app.60个检查),这个长链效率低下,好像第60个检查作为输入,然后它必须不必要地通过59个检查,所以我想像这样实现。

 var implobj = { 23 : handleimpl1,
                 300 : handleimpl2,
                 .
                 .
                 .
               }
 var handleImpl = function( i )
 {
    implobj[i]();
 }

有没有比这个可以用javascript实现的解决方案更好的方法?

注意:输入不是序列号,否则我可以使用数组而不是对象。

4

1 回答 1

7

我会使用你的想法,编码略有不同,如下所示:

var handleImpl = (function() {
    var implobj = {
        23 : handleimpl1,
        300 : handleimpl2,
        // ...
        defaultImpl: someDefaultFn
    }

    return function(i) {
        (implobj[i] || implobj.defaultImpl)();
    };
}());
于 2013-01-21T18:40:34.280 回答