आप 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);
};
क्या होगा यदि मैं गुंजाइश सरणी के पहले तत्व बनना चाहते हो? क्या मुझे शिफ्ट() का उपयोग करके नकली करने की ज़रूरत है? – David
@ डेविड: दायरे से आपका क्या मतलब है? 'यह' कीवर्ड? – CMS
हां, लागू() का उपयोग करके, पहला तर्क फ़ंक्शन के लिए दायरा (यह) बन जाता है, है ना? इस मामले में दायरे को पहला सरणी तत्व होना चाहिए। – David