2013-08-25 10 views
6

मैं इस पर थोड़ा उलझन में हूं। कृपया नीचे दिए गए कोड को ढूंढें।अवैध आमंत्रण त्रुटि जब console.log एक फ़ंक्शन में पारित

var o={ 
printToConsole: function(f){ 
    f(1); 
} 
}; 

o.printToConsole(console.log); 

//TypeError: Illegal invocation // मैं हम इस

`function log() { [native code] }` 

क्रोम, जो स्पष्ट रूप से प्रदर्शित करता है कि यह किसी भी तर्क नहीं ले करता है में मिल console.log की परिभाषा से एक लेखन त्रुटि

मिलता है, हालांकि जब हम कंसोल पर चीजों को प्रिंट करने का प्रयास करते हैं तो हम इस तरह लिखते हैं यानी console.log पर तर्क पास करते हैं।

console.log('Take me on Console'); 

मैं इस लेखन त्रुटि क्यों मिल रही है और कैसे इस console.log क्रोम में बर्ताव करता है?

उत्तर

12

बदलें

o.printToConsole(console.log); 

o.printToConsole(console.log.bind(console)); 

या

o.printToConsole(function(){ console.log.apply(console.log, arguments) }); 

करने के लिए console.log समारोह केवल काम करता है जब रिसीवर (this) सांत्वना है (वास्तव में, यह ब्राउज़र निर्भर है) ।

+0

आप सही हैं। यह ब्राउज़र निर्भर है। – Mozak

+0

फ़ायरफ़ॉक्स कंसोल के साथ बाध्यकारी किए बिना कंसोल में संदेश प्रदर्शित करता है। – Mozak

+1

एक समान प्रश्न मिला http://stackoverflow.com/questions/8904782/uncaught-typeerror-illegal-invocation-in-javascript – Mozak

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