"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > नेस्टेड जावास्क्रिप्ट फ़ंक्शंस में "यह" पॉइंटर वैश्विक ऑब्जेक्ट की ओर क्यों इंगित करता है?

नेस्टेड जावास्क्रिप्ट फ़ंक्शंस में "यह" पॉइंटर वैश्विक ऑब्जेक्ट की ओर क्यों इंगित करता है?

2024-11-01 को प्रकाशित
ब्राउज़ करें:535

Why Does the \

जावास्क्रिप्ट "यह" नेस्टेड फ़ंक्शंस में पॉइंटर रहस्य

जावास्क्रिप्ट कोड स्निपेट में, आपको "इस" के संबंध में एक अप्रत्याशित व्यवहार का सामना करना पड़ा है "नेस्टेड फ़ंक्शन के भीतर सूचक। किसी ऑब्जेक्ट विधि के भीतर नेस्टेड फ़ंक्शन को परिभाषित करने के बावजूद, नेस्टेड फ़ंक्शन के अंदर "यह" पॉइंटर वैश्विक "विंडो" ऑब्जेक्ट को इंगित करता है।

"इस" पॉइंटर का व्यवहार फ़ंक्शन इनवोकेशन विधि द्वारा निर्धारित किया जाता है जावास्क्रिप्ट। तीन प्राथमिक विधियाँ हैं:

  1. प्रत्यक्ष आह्वान: someThing.someFunction(arg1, arg2, argN)

    • इस विधि में, "यह" सूचक संदर्भित करता है फ़ंक्शन को लागू करने वाले ऑब्जेक्ट के लिए, इस मामले में, someThing.
  2. फ़ंक्शन कॉल विद कॉल(): someFunction.call(someThing, arg1, arg2, argN)

    • कॉल() फ़ंक्शन स्पष्ट रूप से "इस" पॉइंटर को दिए गए ऑब्जेक्ट पर सेट करता है, इस मामले में, कुछ।
  3. फ़ंक्शन कॉल अप्लाई() के साथ : someFunction.apply(someThing, [arg1, arg2, argN])

    • कॉल() के समान, अप्लाई() फ़ंक्शन "इस" पॉइंटर को दिए गए ऑब्जेक्ट पर सेट करता है, लेकिन यह एक लेता है इसके बजाय तर्कों की सरणी।

आपके द्वारा प्रदान किए गए उदाहरण में, नेस्टेड फ़ंक्शन को किसी भी स्पष्ट फ़ंक्शन आमंत्रण विधियों के बिना लागू किया जाता है। परिणामस्वरूप, "यह" पॉइंटर वैश्विक ऑब्जेक्ट पर डिफॉल्ट हो जाता है, जो आमतौर पर ब्राउज़र वातावरण में "विंडो" ऑब्जेक्ट होता है।

"इस" पॉइंटर व्यवहार को स्पष्ट रूप से निर्दिष्ट करने के लिए, आप निम्नलिखित संशोधनों का उपयोग कर सकते हैं :

  1. std_obj.displayMe के बजाय std_obj.displayMe() का उपयोग करें; डिस्प्लेमी विधि को स्पष्ट रूप से कॉल करने के लिए।
  2. ऑब्जेक्ट के इस पॉइंटर के साथ नेस्टेड फ़ंक्शन को स्पष्ट रूप से परिभाषित करें: var doSomeEffects = function() { varthat = this; ... }
  3. "यह" पॉइंटर सेट करने के लिए कॉल() या अप्लाई() फ़ंक्शन का उपयोग करें: doSomeEffects.call(std_obj);

इनमें से किसी भी तरीके का उपयोग करके , आप नेस्टेड फ़ंक्शंस के भीतर "इस" पॉइंटर के व्यवहार को नियंत्रित कर सकते हैं और सुनिश्चित कर सकते हैं कि यह वांछित ऑब्जेक्ट को संदर्भित करता है।

विज्ञप्ति वक्तव्य यह लेख यहां पुनर्मुद्रित है: 1729291638 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.कॉम से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3