2009-12-10 16 views
13

क्या मैं जावास्क्रिप्ट में सुविधाजनक तरीके से तर्कों की सरणी के साथ फ़ंक्शन को कॉल कर सकता हूं?तर्कों की सरणी के साथ कॉल फ़ंक्शन

उदाहरण:

var fn = function() { 
    console.log(arguments); 
} 

var args = [1,2,3]; 

fn(args); 

मैं arguments जरूरत [1,2,3] हो सकता है, बस मेरी सरणी की तरह।

उत्तर

26

आप apply उपयोग करना चाहिए:

var fn = function() { 
    console.log(arguments); 
}; 

var args = [1,2,3]; 

fn.apply(null, args); 

बराबर समारोह कॉल कर देगा लागू करें:

fn(1,2,3); 

सूचना है कि मैं apply के पहले तर्क के रूप में null इस्तेमाल किया, कि करने के लिए this कीवर्ड सेट हो जाएगा fn के अंदर वैश्विक वस्तु (window)।

इसके अलावा आपको पता होना चाहिए कि arguments वस्तु वास्तव में एक सरणी नहीं है, यह एक सरणी जैसी वस्तु, कि तर्क है कि आपके समारोह कॉल करने के लिए इस्तेमाल किया गया, एक length संपत्ति है कि आप की संख्या देता है के लिए इसी संख्यात्मक अनुक्रमित शामिल है तर्कों का उपयोग किया गया, और arguments.callee संपत्ति जो निष्पादन कार्य का संदर्भ है (अज्ञात कार्यों पर पुनरावृत्ति के लिए उपयोगी)।

var fn = function() { 
    var args = Array.prototype.slice.call(arguments); 
    console.log(args); 
}; 

संपादित करें::

आप अपने arguments वस्तु से एक सरणी बनाना चाहते हैं, तो आप Array.prototype.slice विधि का उपयोग कर सकते हैं अपनी टिप्पणी के जवाब में, हाँ, आप shift विधि इस्तेमाल कर सकते हैं और सेट

fn.apply(args.shift(), args); 

लेकिन उस shift निकाल देंगे याद रखें: अपने कार्य पर संदर्भ (this कीवर्ड) के रूप में अपनी दिए गए मान मूल सरणी से पहला तत्व, और आपके फ़ंक्शन को उस पहले तर्क के बिना बुलाया जाएगा।

आप अभी भी अपने अन्य सभी तर्क के साथ अपने फ़ंक्शन को कॉल करने की जरूरत है आप कर सकते हैं:

fn.apply(args[0], args); 

और अगर आप संदर्भ बदलने के लिए नहीं करना चाहते, तो आप बस अपने समारोह के अंदर पहला तर्क निकाल सकते:

var fn = function() { 
    var args = Array.prototype.slice.call(arguments), 
     firstArg = args.shift(); 

    console.log(args, firstArg); 
}; 
+0

क्या होगा यदि मैं गुंजाइश सरणी के पहले तत्व बनना चाहते हो? क्या मुझे शिफ्ट() का उपयोग करके नकली करने की ज़रूरत है? – David

+0

@ डेविड: दायरे से आपका क्या मतलब है? 'यह' कीवर्ड? – CMS

+0

हां, लागू() का उपयोग करके, पहला तर्क फ़ंक्शन के लिए दायरा (यह) बन जाता है, है ना? इस मामले में दायरे को पहला सरणी तत्व होना चाहिए। – David

5

ECMAScript 6 में, आप उस उद्देश्य के लिए spread syntax (...) उपयोग कर सकते हैं। यह Function.prototype.apply() से समझने के लिए आसान और आसान तरीका है।

कोड उदाहरण:

const fn = function() { 
    console.log(arguments); 
} 

const args = [1,2,3]; 

fn(...args); 
संबंधित मुद्दे