2015-09-02 6 views
17

मैं एक समारोह की तरह परिभाषित किया हैES6 के साथ पैरामीटर नाम?</p> <pre><code>function call_api(url, callback, query = {}, body = {}) </code></pre> <p>मैं एक वाक्य रचना है जहाँ मैं शरीर प्रदान करते हैं और क्वेरी को छोड़ सकते हैं उम्मीद:

call_api('/api/clients/new', function(x){console.log(x)}, body={1:2}) 

लेकिन मैं इस समाधान का उपयोग करने के लिए:

call_api('/api/clients/new', function(x){console.log(x)}, {}, {1:2}) 

भले ही मैं body= प्रदान करता हूं, ऐसा लगता है कि यह query पैरामीटर के रूप में दिखाई देता है। मैं वेबपैक के साथ बेबेल का उपयोग करता हूं। मैंने क्रोम कंसोल और वेबपैक स्रोत में वाक्यविन्यास की कोशिश की।

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

+0

आपके विकल्पों पर शानदार लेख: http://www.2ality.com/2011/11/keyword-parameters.html – CodingIntrigue

+5

डिफ़ॉल्ट मान! = नामित तर्क –

उत्तर

17

मेरा सुझाव है एक वस्तु गुजर और का उपयोग कर वस्तुओं के लिए destructuring साथ कि आप इस के आसपास काम:

function callApi({url, callback, query = {}, body = {}}) 

और उसके बाद इसे कॉल करें:

callAPI({url: "/api/..", callback: (x => console.log(x)), body: {a:2}}) 

जो आपको इच्छित व्यक्ति के समान वाक्यविन्यास देगा।

नामांकित तर्कों को सी # और पायथन जैसी अन्य भाषाओं के विपरीत जावास्क्रिप्ट के लिए माना जाता है और अस्वीकार कर दिया गया है। भाषा मेलिंग सूची से Here is a recent discussion about it

+0

वह बहुत बीमार आदमी है! – marcusshep

1

जैसा कि this site पर दिखाया गया है, डिफ़ॉल्ट केवल उन मानकों के लिए हैं जिन्हें डिफ़ॉल्ट मान (विकल्प पैरामीटर की तरह) की आवश्यकता होती है, लेकिन 'छोड़ने' पैरामीटर के लिए नहीं।

आपको क्या करने की कोशिश कर रहे हैं

// function definition 
function hi(a,b,c,d) 

// function call 
hi(a,b,d) 

ES6 अभी भी लगता है कि अपने 'प', परिभाषित ग, अपने डिफ़ॉल्ट मान की परवाह किए बिना है जा रहा है है।
तो नहीं, ES6 में ऐसा वाक्यविन्यास नहीं है।

2

आप निर्दिष्ट नहीं कर सकते कि आप अपने कॉल में कौन सा पैरामीटर निर्दिष्ट करते हैं।

call_api('/api/clients/new', function(x){console.log(x)}, body={1:2})

समारोह के बाहर एक चर नामित शरीर की स्थापना और फिर क्वेरी पैरामीटर की जगह में अपने मूल्य गुजर के बराबर है।

आप जो भी चाहते हैं उसे प्राप्त करने के लिए आप विनाशकारी का उपयोग कर सकते हैं।

function call_api(url, callback, {query = {}, body = {}} = {})

फिर अपने कॉल में आप क्या करेंगे इस

call_api('/api/clients/new', function(x){console.log(x)}, {body:{1:2}})

+0

यदि आप बिना किसी फ़ंक्शन को कॉल करते हैं तो ऐसा प्रतीत नहीं होता है तीसरे तर्क पर ... हालांकि ... 'function call_api (url, callback, {query = {}, body = {}} = {})' –

+0

ओह, इसे जोड़ने के लिए भूल गए। यही है कि मैं टाइपिंग कोड को तुरंत टेक्स्टबॉक्स में प्राप्त करता हूं। मैं जवाब अपडेट करूंगा। – Jonathan

1

देखकर कि डिफ़ॉल्ट पैरामीटर मान केवल प्रयोग किया जाता है जब पैरामीटर अपरिभाषित है, एक ही रास्ता एक पैरामीटर "छोड़" करने के लिए और डिफ़ॉल्ट पर वापस आ undefined भेजने के लिए इसका जगह है में होगा:

call_api('/api/clients/new', function(x){console.log(x)}, undefined, {1:2}) 

उदाहरण: Babel REPL

समारोह के भीतर query का मूल्य {} हो जाएगा (या जो भी आप डिफ़ॉल्ट के लिए सेट) इस मामले में।

यह कुछ हद तक what Visual Basic does जैसा होगा जब आप खाली मान पास करके डिफ़ॉल्ट पैरामीटर मान का उपयोग करना चाहते हैं। (उदाहरण के लिए sub name(argument 1, , , argument 4))

अन्यथा, यदि आप नामित पैरामीटर के लिए समर्थन चाहते थे, तो सबसे अच्छा समझौता @ बेंजामिन ग्रुनेबाम द्वारा प्रदान किया गया उत्तर होगा।


अद्यतन: बेहतर होगा कि तुम अभी तक this article provides an option using the arguments keyword, या हो सकता है, तो आप iterate over the ES6 ...rest parameters collection जावास्क्रिप्ट में एक overloaded function अनुकरण करने के लिए कर सकता है।

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