2012-07-20 15 views
7

मैं लोकप्रिय console.log() रैपर/polyfills में से कुछ को देख रहा है:क्यों console.log() polyfills Function.apply() का उपयोग नहीं करते हैं?

मैं देखा कि उन सभी को कई arguments स्वीकार करते हैं, लेकिन वे सब कुछ ऐसा करते हैं:

console.log(arguments); 

कौन इस तरह उत्पादन में जो परिणाम (क्रोम में):

<code>console.log(['foo', 'bar', $('body')])</code>

, जबकि कम से कम Chrome या Firefox जैसे एक आधुनिक ब्राउज़र में, console.log() भी कई तर्क, स्वीकार करता है ताकि यह उत्पादन होगा (IMHO) बेहतर उत्पादन:

console.log.apply(console, arguments) 

कौन इस तरह उत्पादन में जो परिणाम (क्रोम में):

<code>console.log.apply(console, ['foo', 'bar', $('body')])</code>

क्या कोई विशेष कारण है कि मुझे कई तर्कों के साथ console.log.apply() का उपयोग करने से बचना चाहिए? या यह सिर्फ स्वाद या बाइट्स की बचत का मामला है?

+0

@PaulIrish कॉल कर सकते हैं console.log console.log.apply बनाम पर कोई विचार? –

+3

यह शायद मुख्य कारण नहीं है, लेकिन IE में console.log प्रॉपर्टी में फ़ंक्शन प्रोटोटाइप नहीं है। यानी, इसमें 'लागू' फ़ंक्शन नहीं है। – Sam

+1

ठीक है, यह शायद एक बहुत अच्छा कारण है। –

उत्तर

1

मैं व्यक्तिगत रूप से सुझाव है कि आप केवल .apply() का उपयोग आप के लिए है जब: .apply() एक समारोह के तर्कों के रूप में एक सरणी पारित करने के लिए एक ही रास्ता है। यदि आप को किसी सरणी को पास करने के लिए की आवश्यकता नहीं है, तो बस console.log() का उपयोग करें। यह कम वर्बोज़ है और यह प्रत्यक्ष आमंत्रण है।

+0

ठीक है, मैं यही सोचता हूं, लेकिन जो लोग जेएस को बेहतर जानते हैं, वे ऐसा नहीं कर रहे हैं, और इसलिए मैं जानना चाहता हूं कि क्यों। –

0

कृपया ध्यान दें कि applyसरणी तर्कों का लेता है!

तो बुला console.log(args)console.log.apply(console, [args]), नहीं console.log.apply(console, args) बराबर व्यवहार करने के लिए रहना होगा - सरणी में प्रत्येक आइटम अपने उदाहरण में अपने लागू में बहुत ही तर्क हो जाता है।

दूसरी ओर आप भी console.log("foo", "bar", $("body"))

संबंधित मुद्दे