बुनियादी सामान से शुरू,
.call
क्या है? इसका एक समारोह Function.prototype
के अंदर उपलब्ध है। ताकि इसे किसी भी फ़ंक्शन पर बुलाया जा सके, यही कारण है कि आप a.call
पर कॉल करने में सक्षम हैं।
अब, .call
क्या करता है? यह .call
पर फ़ंक्शन पर this
संदर्भ सेट करता है। इसलिए आपके मामले में, जब आप a.call
पर कॉल करते हैं तो यह फ़ंक्शन a
पर संदर्भित कर सकता है (पहले पैरामीटर के माध्यम से आप .call
फ़ंक्शन पर जाते हैं)।
this
.call
फ़ंक्शन के अंदर क्या है? यह लेकिन समारोह आप पर .call
कहा जाता है कुछ भी नहीं है (अपने मामले a
में),
है तो सादगी के लिए आप मान, .call
अंदर यह this()
तरह फ़ंक्शन को कॉल किया जा सकता है (और है कि a()
बुला लेकिन कुछ भी नहीं है) - अब तक तो अच्छा
अपने प्रश्न
a.call.call
यहाँ क्या हो रहा है के लिए? दूसरा .call
(मैं बाएं से दाएं गिन रहा हूं) पहले .call
पर कॉल कर रहा है और पहले .call
के लिए this
सेट कर रहा है, जो कि पहले पैरामीटर के अलावा कुछ भी नहीं है, जो एक फ़ंक्शन है।
अब पहले .call
this()
फोन करेगा (याद इस दूसरे .call
द्वारा निर्धारित है और यह पहली परम आप पारित कर दिया है और यह एक समारोह है)।
मुझे उम्मीद है कि मैं समझा सकता हूं कि मैं क्या समझाना चाहता हूं।
मुझे बताएं कि आप a.call.call
के साथ क्यों उलझन में हैं। ऐसा इसलिए है क्योंकि आप सोच रहे हैं कि मेरे फ़ंक्शन a
इस भ्रम में कहाँ गए? जो वास्तव में के रूप में यो फोन दूसरा .call
आप मामले .call.call
Function.prototype
या Object
पर बुलाया गया है चाहिए में (यहाँ this
पहले .call
से पीछे नहीं .call
जो इस मामले में अपने कार्य a
अप्रचलित बनाता है से आ रही है) के रूप में जल्द ही शामिल नहीं या किसी अन्य समारोह (याद .call
Function.prototype
का हिस्सा है और किसी भी समारोह पर कहा जा सकता है)
ताकि आप
Function.prototype.call.call(...)
किया जाना चाहिए
या यहाँ तक कि
Object.call.call(...)
अब मैं पिछले सप्ताह (नहीं .call.call
लेकिन .call.bind
) इन बात के बारे में उलझन में था, मैं एक सवाल यहां कहा, और किसी को बहुत विस्तृत में मेरे लिए यह बताया गया है, आप इसे पा सकते हैं HERE
मैंने मुझसे पूछे गए प्रश्न से मेरी समझ से जवाब देने का प्रयास किया।
आप सवाल "यह b.call की तरह (a.call.call के रूप में ही) लगता है पहला तर्क बुला रहा है, जो:
इस सब के बाद क्या एसओ के लिए
अद्यतन है एक फ़ंक्शन, फिर दूसरा तर्क इस तरह से पास करें। यदि पहला तर्क फ़ंक्शन नहीं है, तो फ़ंक्शन त्रुटि फेंक दें। "
अपने धारणा यहाँ
"[दस्तावेज के युद्धपोत] (http://meta.stackoverflow.com/q/303865/419956)" a.k.a. "NullReference" अभी तक यहां नहीं है, जब तक कि आपका प्रश्न शायद थोड़ा अधिक व्यापक न हो। तब तक, मैं [MDN] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Function/call) जैसे अन्य संसाधनों की अनुशंसा करता हूं। – Jeroen
@ जेरोइन मैंने पहले ही एमडीएन पर उस दस्तावेज़ को पढ़ा है, लेकिन यह बताता है कि 'कॉल' फ़ंक्शन कैसे काम करता है, और कुछ उदाहरण देता है। मैं वास्तव में यहां क्या कहता हूं 'call.call' है, जिसका व्यवहार' कॉल 'से अलग है। और मैं 'call.call' के पीछे काम नहीं कर सकता। – tjfdfs
'.call()' का पहला तर्क वह ऑब्जेक्ट है जिसे आप उस कॉल में 'this' मान के रूप में सेट करना चाहते हैं जिसे 'कॉल()' चालू करना है। यदि 'कॉल()' स्वयं ही कार्य करने के लिए फ़ंक्शन है क्योंकि आपने '.call.call() 'जंजीर' '' मूल्य के साथ क्या किया है? यह मानता है कि यह एक समारोह है और इसे कॉल करने का प्रयास करता है। लेकिन कोड की आपकी आखिरी पंक्ति फ़ंक्शन पास नहीं करती है, यह एक खाली ऑब्जेक्ट पास करती है। – nnnnnn