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

नेस्टेड फ़ंक्शंस में जावास्क्रिप्ट \"यह\" पॉइंटर: भ्रम को कैसे हल करें?

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

Javascript \

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

एक वेब विकास परिदृश्य में, नेस्टेड फ़ंक्शन के भीतर "यह" पॉइंटर का व्यवहार हैरान करने वाला हो सकता है. निम्नलिखित कोड पर विचार करें:

var std_obj = {
  options: {rows: 0, cols: 0},
  activeEffect: "none",
  displayMe: function() {
    // this refers to std_obj
    if (this.activeEffect == "fade") {}

    var doSomeEffects = function() {
      // this surprisingly refers to window object
      if (this.activeEffect == "fade") {}
    }

    doSomeEffects();
  }
};

std_obj.displayMe();

उपरोक्त कोड में, नेस्टेड फ़ंक्शन "doSomeEffects()" के अंदर "यह" पॉइंटर अप्रत्याशित रूप से "विंडो" ऑब्जेक्ट को इंगित करता है। यह व्यवहार इस अपेक्षा का खंडन करता है कि नेस्टेड फ़ंक्शन बाहरी फ़ंक्शन के दायरे को प्राप्त करेगा, जहां "यह" "std_obj" को संदर्भित करता है।

जावास्क्रिप्ट फ़ंक्शन आमंत्रण और स्कोप को समझना

जावास्क्रिप्ट फ़ंक्शंस में "यह" का व्यवहार इस बात पर निर्भर करता है कि फ़ंक्शन को कैसे लागू किया जाता है। आम तौर पर, तीन तरीके होते हैं:

  1. विधि मंगलाचरण: someThing.someFunction(arg1, arg2, argN)
  2. Function.call आह्वान: someFunction.call(someThing, arg1, arg2, argN)
  3. Function.apply आमंत्रण: someFunction.apply(someThing, [arg1, arg2, argN])

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

उदाहरण कोड में, नेस्टेड फ़ंक्शन "doSomeEffects()" को मूल ऑब्जेक्ट के बिना लागू किया जाता है, इसलिए यह वैश्विक दायरा प्राप्त करता है और इसका "यह" पॉइंटर "विंडो" ऑब्जेक्ट को इंगित करता है। यही कारण है कि आप अप्रत्याशित व्यवहार देखते हैं।

यह सुनिश्चित करने के लिए कि नेस्टेड फ़ंक्शन की "std_obj" दायरे तक पहुंच है, आप इसे "std_obj" ऑब्जेक्ट के साथ Function.call() विधि का उपयोग करके शुरू कर सकते हैं। पहला तर्क:

var doSomeEffects = function() {
  // this now refers to std_obj
  if (this.activeEffect == "fade") {}
}

doSomeEffects.call(std_obj);

जावास्क्रिप्ट में "इस" सूचक व्यवहार की सूक्ष्म बारीकियों को समझना मजबूत और रखरखाव योग्य अनुप्रयोगों के निर्माण के लिए महत्वपूर्ण है।

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

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

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

Copyright© 2022 湘ICP备2022001581号-3