2017-02-23 15 views
6

यहाँ में एक खाली वस्तु के साथ सौंपा, कोड हैजे एस समारोह घोषणा: घुंघराले ब्रेस वस्तु पैरामीटर घोषणा

export function createConnect({ 
    connectHOC = connectAdvanced, 
    mapStateToPropsFactories = defaultMapStateToPropsFactories, 
    mapDispatchToPropsFactories = defaultMapDispatchToPropsFactories, 
    mergePropsFactories = defaultMergePropsFactories, 
    selectorFactory = defaultSelectorFactory 
} = {}) {...} 

क्या करता है {connectHOC = connectAdvanced ...} = {} समारोह पैरामीटर घोषणा के अंदर क्या मतलब है?

मुझे पता है कि

= {} 

समारोह पैरामीटर का डिफ़ॉल्ट मान का अर्थ हो सकता है, लेकिन क्या पिछले ब्रेसिज़ के अंदर कोड के लिए उपयोग है?

+2

मैं पूरी तरह यकीन है कि अभी तक नहीं कर रहा हूँ, लेकिन पहले भाग ('{connectHOC = ......... = defaultSelectorFactory}') नहीं एक वस्तु है, यह कई चर घोषणाओं के साथ एक ब्लॉक है है । एक वस्तु कॉलन का उपयोग करेगी, बराबर संकेत नहीं। –

+1

यह पैरामीटर के लिए डिफ़ॉल्ट मानों का संयोजन है, और विनाशकारी है। आश्चर्यचकित नहीं है कि हमारे पास एसओ पर एक ही समय में दोनों को कवर करने वाला प्रश्न नहीं है, या तो वह या मेरा Google इस बार मुझे असफल कर रहा है। –

+1

[यह करीब है] (http: // stackoverflow।कॉम/प्रश्न/26578167/es6-object-destructuring-default-पैरामीटर), लेकिन काफी डुप्ली नहीं है। [यह भी] (http://stackoverflow.com/questions/34275971/how-to-destructure-option-argument-with-all-default-values-in-es6)। वे दोनों यहां बता रहे हैं कि क्या हो रहा है, लेकिन ओपी के दृष्टिकोण से यह जानकर कि वे "यह वाक्यविन्यास क्या है" दृष्टिकोण के बजाय विनाशकारी मानकों को डिफ़ॉल्ट मान असाइन करना चाहते हैं। –

उत्तर

5

यह ES2015 वाक्यविन्यास है। आपकी फ़ंक्शन घोषणा एक डिफ़ॉल्ट मान के साथ Destructuring assignment को जोड़ती है।

यह एक बुनियादी destructuring एक वस्तु का उपयोग करके असाइनमेंट है:

var {a, b} = {a: "foo", b: "bar"}; 
 
console.log(a); // "foo" 
 
console.log(b); // "bar"

आप बाएं हाथ की ओर करने के लिए डिफ़ॉल्ट मान जोड़ सकते हैं:

var {a = "foo", b = "bar"} = {}; 
 
console.log(a); // "foo" 
 
console.log(b); // "bar"

,210

जब आप तर्क का नाम जब एक समारोह की घोषणा, आप destructuring यह वही होगा var, और वस्तु के साथ प्रयोग नहीं करते:

function test({a = "foo", b = "bar"}){ 
 
    console.log(a + b); 
 
} 
 
test({}); // "foobar" 
 
test({b: "boo"}); // "fooboo"

और, बेशक, आप एक परिभाषित कर सकते हैं डिफ़ॉल्ट मान, ताकि आपके फ़ंक्शन को कोई तर्क न लेना पड़े।

function test({a = "foo", b = "bar"} = {}){ 
 
    console.log(a + b); 
 
} 
 
test(); // "foobar"

+0

अच्छा अतिरिक्त उदाहरण। – msanford

3

यह विनाशकारी का उपयोग करके डिफ़ॉल्ट पैरामीटर करने का तरीका है। जैसा कि आपने डिफ़ॉल्ट के रूप में सुझाव दिया है, आपको अंतिम बिट की आवश्यकता है।

निम्नलिखित है, जो उदाहरण की तरह एक destructuring assignment का उपयोग करता है पर विचार करें:

function withDefault({parameter=something} = {}) { 
 
console.log(parameter) 
 
} 
 

 
let something = 1; 
 
withDefault();

इस एक, जो डिफ़ॉल्ट याद आ रही है बनाम, और जो एक त्रुटि फेंकता है:

function withoutDefault({parameter=something}) { 
 
console.log(parameter) 
 
} 
 

 
let something = 1; 
 
withoutDefault(); 
 
// It needs to be called as withoutDefault({}), withoutDefault(1) or 
 
// with some value, since the function signature doesn't define a default 
 
// in this case.

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