2015-03-14 22 views
10

Yapılandırılmış işlev argümanının adını saklamanın bir yolu var mı? Yani, kök nesnenin adı?ES6 yıkıcı işlev parametresi - adlandırma kök nesnesi

ES5, ben (noktayı bir metafor olarak kullanarak miras) Bu yapabilir: Birden fazla yapılandırma parametrelerini tutmak için aynı options nesne kullanıyorum

// ES5: 
var setupParentClass5 = function(options) { 
    textEditor.setup(options.rows, options.columns); 
}; 

var setupChildClass5 = function(options) { 
    rangeSlider.setup(options.minVal, options.maxVal); 
    setupParentClass5(options); // <= we pass the options object UP 
}; 

. Bazı parametreler ana sınıf tarafından kullanılır ve bazıları alt sınıf tarafından kullanılır.

Bunu, ES6'da yapılaşmış işlev argümanlarıyla yapmanın bir yolu var mı?

// ES6: 
var setupParentClass6 = ({rows, columns}) => { 
    textEditor.setup(rows, columns); 
}; 

var setupChildClass6 = ({minVal, maxVal}) => { 
    rangeSlider.setup(minVal, maxVal); 
    setupParentClass6(/* ??? */); // how to pass the root options object? 
}; 

Ya tek tek setupParentClass6() geçirilecek, böylece setupChildClass6() seçeneklerin hepsi ayıklamak gerekiyor?

// ugh. 
var setupChildClass6b = ({minVal, maxVal, rows, columns}) => { 
    rangeSlider.setup(minVal, maxVal); 
    setupParentClass6({rows, columns}); 
}; 

cevap

7

'Seçenekler' argümanlarını çok fazla yerde kendim de var. 1 ek kod satırı tercih ederim. Bu örnekte değersiz, ancak daha fazla hat üzerinde yıkımı yaparken iyi bir çözüm.

const setupChildClass6 = options => { 
    const {minVal, maxVal} = options; 
    rangeSlider.setup(minVal, maxVal); 
    setupParentClass6(options); 
}; 
+0

Anlaştık - bu benim de kullandığım şey. Hepimiz es6'yı son birkaç ayda çok daha iyi kullanmayı öğrendik! – jbx

3

Aynı parametre için aynı parametre için yıkıcı ve basit adlandırılmış konumsal bağımsız değişken kullanamazsınız. Ne yapabilirsiniz:

  1. Kullanım strüktür setupChildClass6 için setupParentClass6 fonksiyonu, ama eski ES6 yaklaşımı (Sadece isim kısaltmak, bu en iyi seçim olduğunu düşünüyorum) için:

    var setupChildClass6 = (o) => { 
        rangeSlider.setup(o.minVal, o.maxVal); 
        setupParentClass6(o); 
    }; 
    
  2. Kullanım eski arguments nesne. Ama arguments bir işlev (V8 özellikle) yavaşlatabilir, bu yüzden kötü bir yaklaşım olduğunu düşünüyorum:

    :

    var setupChildClass6 = ({minVal, maxVal}) => { 
        rangeSlider.setup(minVal, maxVal); 
        setupParentClass6(arguments[0]); 
    }; 
    
  3. ES7 (eğer setupParentCalss6 işlevinde minVal ve maxVal gerekmiyorsa) rest/spread properties için önerisi var

    Ne yazık ki, ES6 değil.

+0

Teşekkürler, süper yararlı. Aslında # 2 niyetine en yakın ve fonksiyonun nasıl kullanıldığı göz önüne alındığında yavaşlama uygun olmayacaktır. Şimdilik Babel kullanıyorum, bu yüzden yakında nesneleri üzerinde dinlenme özellikleri alacak. – jbx

+2

# 2'de gösterildiği gibi 'arguments' kullanımı aslında yavaş değil. Ama bunun okunamaz olduğunu düşünürdüm. – Bergi

+1

Dinlenme özellikleri sorununuzu çözmeyebilir, çünkü 'minVal' ve' maxVal' 'options' nesnelerinin dışına çıkar. Dikkat. – Bergi