2015-03-14 12 views
10

क्या कोई विनाशकारी फ़ंक्शन तर्क का नाम बनाए रखने का कोई तरीका है? यानी, मूल वस्तु का नाम?ES6 विनाशकारी फ़ंक्शन पैरामीटर - नामकरण रूट ऑब्जेक्ट

ES5 में, मैं (बात करने के लिए एक रूपक के रूप वंशानुक्रम का उपयोग) ऐसा करने दे सकता है:

// 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 
}; 

मैं एक ही options वस्तु का उपयोग कर रहा एकाधिक कॉन्फ़िगरेशन पैरामीटर धारण करने के लिए। कुछ पैरामीटर माता-पिता वर्ग द्वारा उपयोग किए जाते हैं, और कुछ उप-वर्ग द्वारा उपयोग किए जाते हैं।

क्या ईएस 6 में विनाशकारी कार्य तर्कों के साथ ऐसा करने का कोई तरीका है?

// 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? 
}; 

या मैं इतना है कि वे व्यक्तिगत रूप से setupParentClass6() में पारित किया जा सकता setupChildClass6() में विकल्पों में से सभी को निकालने के लिए की जरूरत है?

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

उत्तर

7

मेरे पास बहुत सारे स्थानों पर 'विकल्प' तर्क हैं। मैं कोड की 1 अतिरिक्त लाइन का चयन करूंगा। इस उदाहरण में योग्य नहीं है, लेकिन अधिक लाइनों पर विनाशकारी होने पर एक अच्छा समाधान है।

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

सहमत - यह वही है जो मैं भी उपयोग कर रहा हूं। हमने पिछले कुछ महीनों में es6 को बेहतर तरीके से उपयोग करना सीखा है! – jbx

3

आप एक ही पैरामीटर के लिए विनाशकारी और सरल नामित स्थितित्मक तर्क का उपयोग नहीं कर सकते हैं। आप क्या कर सकते हैं:

  1. setupParentClass6 समारोह, लेकिन पुराने ES6 दृष्टिकोण setupChildClass6 के लिए (मुझे लगता है कि यह सबसे अच्छा विकल्प है, बस नाम कम करने) के लिए destructuring उपयोग:

    var setupChildClass6 = (o) => { 
        rangeSlider.setup(o.minVal, o.maxVal); 
        setupParentClass6(o); 
    }; 
    
  2. उपयोग वर्ष arguments वस्तु। लेकिन arguments एक समारोह (वी 8 विशेष) धीमा कर सकते हैं, तो मुझे लगता है कि यह एक बुरा दृष्टिकोण है:

    :

    var setupChildClass6 = ({minVal, maxVal}) => { 
        rangeSlider.setup(minVal, maxVal); 
        setupParentClass6(arguments[0]); 
    }; 
    
  3. ES7 rest/spread properties के लिए प्रस्ताव (यदि आप setupParentCalss6 समारोह में minVal और maxVal जरूरत नहीं है) है

    दुर्भाग्य से यह ES6 नहीं है।

+0

धन्यवाद, सुपर-सहायक। असल में # 2 इरादे के सबसे नज़दीकी है, और मंदी को प्रासंगिक नहीं किया जाएगा, यह कि फ़ंक्शन का उपयोग कैसे किया जाता है। इस पल के लिए, मैं बेबेल का उपयोग कर रहा हूं, इसलिए शायद इसे ऑब्जेक्ट्स पर बाकी गुण मिलेंगे। – jbx

+2

# 2 में दिखाए गए अनुसार 'तर्क' का उपयोग वास्तव में धीमा नहीं है। लेकिन मैं इसे अपठनीय मानता हूं। – Bergi

+1

बाकी गुण आपकी समस्या का समाधान नहीं कर सकते हैं, क्योंकि यह 'विकल्प' ऑब्जेक्ट्स से 'minVal' और' maxVal' लेता है। खबरदार। – Bergi

संबंधित मुद्दे