2012-10-01 21 views
5

वहाँ किसी भी ब्राउज़र प्रतिबंध या किसी अन्य मुद्दों है कि मुझे ऐसा करने से रोकता है कर रहे हैंक्या कॉल करने से पहले तर्कों को ऐरे में परिवर्तित करना आवश्यक है?</p> <pre><code>fn.apply(this, arguments); </code></pre> <p>बनाम:

fn.apply(this, Array.prototype.slice.call(arguments)); 

मुझे पता है कि apply दूसरा तर्क के रूप में लेता है "सही" Array, लेकिन एक गुजर तर्क संग्रह उतना ही अच्छा काम करता है। या ...?

उत्तर

4

MDN के अनुसार, यह "एक मान के साथ एक फ़ंक्शन को कॉल करता है और एक सरणी (या वस्तु जैसे सरणी) के रूप में प्रदान किए गए तर्कों को कॉल करता है"। यह देखते हुए कि arguments एक सरणी जैसी वस्तु है, इसका उपयोग करने पर कोई प्रतिबंध नहीं होना चाहिए।

वास्तव में, description स्पष्ट रूप से arguments मान्य पैरामीटर है।

+1

मैंने ऐसा भी सोचा, लेकिन मैं कई "पेशेवर" कोड उदाहरणों में 'Array.prototype.slice.call (तर्क) 'देख रहा हूं, मुझे लगा कि एक वैध कारण होना चाहिए ... – David

+0

यदि आप चाहें तो यह आवश्यक है उन पर ऐरे ऑपरेशंस करने के लिए, जैसे कि संलग्न, शिफ्ट या पुश, इसलिए अधिकांश डेवलपर्स मुझे पता है कि यह किसी और चीज की तुलना में अधिक आदत से बाहर है। – saml

0

समर्थन एमडीएन पर unknown है।

केवल फ़ायरफ़ॉक्स Function.prototype.apply() के दूसरे तर्क के लिए ऐरे जैसी वस्तुओं को स्वीकार करने के लिए जाना जाता है। मैं सीधे arguments पास करने से पहले सावधानी बरतूँगा।