2016-04-10 25 views
0

Aşağıdaki kodu kullanarak çalışıyorum Tamam.anahtarlama işlevini değiştirmek için anahtar kodunu kullanın.

_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; 
     }, 

Ben JS için yeni beri ve ben anahtarı bazen bu sözde Coe değişiklik olabileceğini devamını oku öğrenmek istiyorum:

Bu

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);. 

benim sorum ben nasıl olabilir olduğunu kodumu buna göre değiştir anahtarı ve args nasıl geçeceğinden emin değilim, requirejs AMD modülünü kullanıyorum.

+0

göstermek iki örnekte – nnnnnn

+0

@nnnnnn - Teşekkürler ama nasıl değiştireceğinizden emin değilsiniz. –

+0

Önbelleklenen nesne (Tabloya bakın) yöntemi, Chrome'da çok daha hızlıdır, ancak Geçiş Kutusu Firefox'ta daha hızlıdır. Buradan kontrol edin https://jsperf.com/switch-vs-object-literal-vs-module/28 – Redu

cevap

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);

doğrudan karşılaştırılabilir değildir ve bence `actions` nesne yapmaz duygusu ile örnek gibi çalışması için kodunuzu değiştirmeye çalışıyor. Bazen `switch` en iyi seçimdir. Sizin durumunuzda, ilk durumu sadece “this._createElement öğesini döndürün (Filecontent, config)” ve ikinci durum değerini döndürerek anahtarı basitleştirebilirsiniz. O zaman "break" ifadelerine veya "oExtended" değişkenine ihtiyacınız olmaz.
+0

HI Teşekkür ederim, require.js AMD modülünün içinde, nasıl kod kullanmalıyım o zaman? ve var, _handleInnerElement: function (someFileContent, config) {gibi bir şeye değiştirilmeye gerek yoktur {? –

İlgili konular