जवाबों:
const args = ['p0', 'p1', 'p2'];
call_me.apply(this, args);
के लिए MDN डॉक्स देखें Function.prototype.apply()
।
यदि पर्यावरण ECMAScript 6 का समर्थन करता है, तो आप इसके बजाय प्रसार तर्क का उपयोग कर सकते हैं :
call_me(...args);
आप पूरे एरे को पास क्यों नहीं करते और इसे फंक्शन के अंदर आवश्यकतानुसार प्रोसेस करते हैं?
var x = [ 'p0', 'p1', 'p2' ];
call_me(x);
function call_me(params) {
for (i=0; i<params.length; i++) {
alert(params[i])
}
}
call_me
फ़ंक्शन के लिए एक कॉल है । यह अंत में एक अर्धविराम की कमी है।
ईएस 6 मानक में एक नया प्रसार ऑपरेटर ...
होता है जो ठीक यही करता है।
call_me(...x)
यह IE को छोड़कर सभी प्रमुख ब्राउज़रों द्वारा समर्थित है।
स्प्रेड ऑपरेटर कई अन्य उपयोगी चीजें कर सकता है, और लिंक किए गए प्रलेखन को दिखाने पर वास्तव में अच्छा काम होता है।
जैसा @KaptajnKold ने उत्तर दिया था
var x = [ 'p0', 'p1', 'p2' ];
call_me.apply(this, x);
और आपको call_me फ़ंक्शन के लिए हर पैरामीटर को परिभाषित करने की आवश्यकता नहीं है। आप बस इस्तेमाल कर सकते हैंarguments
function call_me () {
// arguments is a array consisting of params.
// arguments[0] == 'p0',
// arguments[1] == 'p1',
// arguments[2] == 'p2'
}
इस पर ध्यान दें
function FollowMouse() {
for(var i=0; i< arguments.length; i++) {
arguments[i].style.top = event.clientY+"px";
arguments[i].style.left = event.clientX+"px";
}
};
// ---------------------------
html पेज
<body onmousemove="FollowMouse(d1,d2,d3)">
<p><div id="d1" style="position: absolute;">Follow1</div></p>
<div id="d2" style="position: absolute;"><p>Follow2</p></div>
<div id="d3" style="position: absolute;"><p>Follow3</p></div>
</body>
किसी भी आर्ग के साथ फ़ंक्शन कॉल कर सकते हैं
<body onmousemove="FollowMouse(d1,d2)">
या
<body onmousemove="FollowMouse(d1)">
स्प्रेड ऑपरेटर का उपयोग करते समय हमें ध्यान देना चाहिए कि यह अंतिम या एकमात्र पैरामीटर पास होना चाहिए। और यह विफल हो जाएगा।
function callMe(...arr){ //valid arguments
alert(arr);
}
function callMe(name, ...arr){ //valid arguments
alert(arr);
}
function callMe(...arr, name){ //invalid arguments
alert(arr);
}
यदि आपको शुरू करने वाले तर्क के रूप में एक सरणी पास करने की आवश्यकता है:
function callMe(arr, name){
let newArr = [...arr];
alert(newArr);
}
आप अधिक मूल रूप में प्रसार ऑपरेटर का उपयोग कर सकते हैं
[].concat(...array)
ऐसे कार्यों के मामले में जो सरणियाँ लौटाते हैं लेकिन उनसे तर्क के रूप में पारित होने की उम्मीद की जाती है
उदाहरण:
function expectArguments(...args){
return [].concat(...args);
}
JSON.stringify(expectArguments(1,2,3)) === JSON.stringify(expectArguments([1,2,3]))
जवाब पहले से ही दिया गया था, लेकिन मैं सिर्फ अपना केक देना चाहता हूं। आप जो हासिल करना चाहते हैं उसे कहा जाता हैmethod borrowing
जेएस के संदर्भ में है, जब हम एक वस्तु से एक विधि लेते हैं और इसे किसी अन्य वस्तु के संदर्भ में कहते हैं। सरणी विधियों को लेना और उन्हें तर्कों पर लागू करना काफी आम है। मैं आपको एक उदाहरण देता हूं।
इसलिए हमारे पास "सुपर" हैशिंग फ़ंक्शन है जो एक तर्क के रूप में दो नंबर लेता है और "सुपर सेफ" हैशेड स्ट्रिंग देता है:
function hash() {
return arguments[0]+','+arguments[1];
}
hash(1,2); // "1,2" whoaa
अब तक बहुत अच्छा है, लेकिन हमें उपरोक्त दृष्टिकोण के साथ थोड़ी समस्या है, यह विवश है, केवल दो संख्याओं के साथ काम करता है, जो कि गतिशील नहीं है, चलो इसे किसी भी संख्या के साथ काम करते हैं और इसके अलावा आपको एक सरणी पास करने की आवश्यकता नहीं है (आप कर सकते हैं) यदि आप अभी भी जोर देते हैं)। ठीक है, पर्याप्त बात करते हैं, चलो लड़ो!
प्राकृतिक समाधान arr.join
विधि का उपयोग करना होगा :
function hash() {
return arguments.join();
}
hash(1,2,4,..); // Error: arguments.join is not a function
ओह यार। दुर्भाग्य से, यह काम नहीं करेगा। क्योंकि हम हैश (तर्कों) को बुला रहे हैं और तर्कों को चलने योग्य और सरणी-दोनों तरह का है, लेकिन वास्तविक सरणी नहीं है। नीचे के दृष्टिकोण के बारे में कैसे?
function hash() {
return [].join.call(arguments);
}
hash(1,2,3,4); // "1,2,3,4" whoaa
चाल कहा जाता है method borrowing.
हम join
एक नियमित सरणी से एक विधि उधार लेते हैं [].join.
और [].join.call
इसे संदर्भ में चलाने के लिए उपयोग करते हैं arguments
।
यह काम क्यों करता है?
ऐसा इसलिए है क्योंकि मूल विधि का आंतरिक एल्गोरिदम arr.join(glue)
का बहुत सरल है।
विनिर्देशन से लिया गया लगभग "जैसा है":
Let glue be the first argument or, if no arguments, then a comma ",".
Let result be an empty string.
Append this[0] to result.
Append glue and this[1].
Append glue and this[2].
…Do so until this.length items are glued.
Return result.
तो, तकनीकी रूप से यह इसे लेता है और इस [0], इस [1]… आदि को एक साथ जोड़ता है। यह जानबूझकर एक तरह से लिखा गया है, जो किसी भी सरणी-जैसे (संयोग नहीं, कई तरीके इस अभ्यास का पालन करता है) की अनुमति देता है। इसलिए इसके साथ भी काम करता हैthis=arguments.