धन्यवाद आप केवल एक परत से ES2015 का उपयोग कर रहे हैं, तो आप प्रसार अंकन, Array.from
, और slice
उपयोग कर सकते हैं:: तो समारोह निम्नलिखित जैसे लगते हैं
function composeObj(objs) {
return Object.assign(...Array.from(arguments).slice(1));
}
या बस का उपयोग कर slice
सीधे बजाय Array.from
के बाद:
function composeObj(objs) {
return Object.assign(...Array.prototype.slice.call(arguments, 1));
}
... Thomas' answer बाकी तर्कों का उपयोग करके देखें, क्योंकि यह ES2015 में ऐसा करने का सही तरीका है।
function composeObj(objs) {
return Object.assign.apply(Object, Array.prototype.slice.call(arguments, 1));
}
वहाँ, हम प्रसार ऑपरेटर के बजाय Function#apply
उपयोग कर रहे हैं (ES5 और पहले के बाद से:
आप ES2015 उपयोग नहीं कर रहे हैं, तो आप एक ही बात apply
के माध्यम से सिर्फ एक shimmed Object.assign
साथ कर सकते हैं स्प्रेड ऑपरेटर नहीं है)। Function#apply
उस कॉल को कॉल करता है जिसे आप कॉल के दौरान this
के रूप में पहले तर्क का उपयोग करते हुए कॉल करते हैं, और सरणी (या सरणी जैसी चीज़) का उपयोग करके आप इसे कॉल के तर्क के रूप में दूसरे तर्क के रूप में देते हैं।
तो कहते हैं कि तुम है:
obj.foo(1, 2, 3);
Function#apply
का उपयोग कर के बराबर है:
obj.foo.apply(obj, [1, 2, 3]);
पहला तर्क, obj
, बताता है apply
क्या कॉल के दौरान this
के रूप में उपयोग करने के लिए। दूसरा तर्क उपयोग करने के लिए तर्कों की एक सरणी है।
लेकिन यदि आप स्प्रेड ऑपरेटर का उपयोग करते हैं, तो इसकी कोई ज़रूरत नहीं है, यह अलग-अलग तर्कों में अपने सरणी जैसे ऑपरेंड को फैलाता है।
आप पहले ही तर्क से पारित तर्कों की एक सरणी के रूप में दूसरे से तर्क पारित कर चुके हैं; – itzmukeshy7
@ itzmukeshy7: यह एक सरणी नहीं है, बस सरणी की तरह (जो प्रश्न के लिए प्रासंगिक है)। लेकिन मुझे लगता है कि उदाहरण सिर्फ उस अवधारणा को दिखाने के लिए था जो वे करना चाहते थे। मुद्दा यह है कि तर्कों की संख्या परिवर्तनीय है। –
@ ले-मोई 'तर्क' एक विशेष सरणी है जिसमें सभी पास किए गए तर्क हैं; – itzmukeshy7