2016-04-10 15 views
0

私は以下のコードを使用しています。スイッチコードを最適化してargs関数を呼び出す

_handleIn: function(Filecontent, config) { 
      var oExtendedHTML = Filecontent; 
      switch (config.action) { 
       case 'new': 
        oExtended = this._crElement(Filecontent, config); 
        break; 
       case 'upd': 
        oExtended = this._updlement(oExtended, config); 
        break; 
      } 
      return oExtended; 
     }, 

私はJSに新しいと私はより多くの私は、スイッチが時々この擬似COEに変更することができることを読んで勉強したいので:私の質問はどのように私はできている

この

function actions(key, args){ 
    switch(key){ 
    case: 'foo': 
     return doFoo(args); 
     break; 
    case: 'bar': 
     return doBar(args); 
     break; 
    case: 'baz': 
     return doBaz(args); 
     break 
    } 
} 

var value = actions(keyargs); 

// To This 



var actions = { 
     foo: function doFoo(){...}, 
     bar: function doBar(){...}, 
     baz: function doBaz(){...} 
    }; 

    var value = actions[key](args);. 

私のコードをこれに変更しますか?どのように鍵とargsを渡すかわからない、私はrequirejs AMDモジュールを使用しています。

+0

あなたが示す2つの例は、直接比較できない、と私の意見では、 'actions'オブジェクトと例のように動作するようにコードを変更しようとすることは意味がありません。時には 'switch 'が最良の選択です。あなたのケースでは、最初のケースを 'return this._createElement(Filecontent、config);だけにすることでスイッチを単純化することができ、2番目のケースはその値を返します。そして、 'break'文や' oExtended'変数は必要ありません。 – nnnnnn

+0

@nnnnnn - ありがとうございますが、変更する方法がわからない場合は、answer.thankであなたの例を提供してください! –

+0

キャッシュされたオブジェクトリテラル(ルックアップテーブル)メソッドはChromeで非常に高速ですが、スイッチケースはFirefoxで高速です。ここをクリックしてくださいhttps://jsperf.com/switch-vs-object-literal-vs-module/28 – Redu

答えて

1

// your function without `switch` 
 
var _handleInnerElement = { 
 
    _createElement: function(){ 
 
     alert('create'); 
 
    }, 
 
    _updateElement: function(){ 
 
     alert('update'); 
 
    }, 
 
    // you can use strings also 
 
    'new': function(fileContent, config) { 
 
     return this._createElement(fileContent, config); 
 
    }, 
 
    upd: function(fileContent, config) { 
 
     return this._updateElement(fileContent, config); 
 
    } 
 
} 
 
// some variables to work with 
 
var config = { 
 
    action: 'new', 
 
    some_data: 123 
 
} 
 
var someFileContent = {}; 
 
// usage 
 
_handleInnerElement[config.action](someFileContent, config);

+0

HIありがとうございます、require.js AMDのモジュールの中にありがとうございます。 varは、_handleInnerElementのようなものに変更する必要はありません:function(someFileContent、config){? –

関連する問題