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

जावास्क्रिप्ट में `setTimeout` का उपयोग करते समय `इस` के साथ संदर्भ को कैसे संरक्षित करें?

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

How to Preserve Context with `this` When Using `setTimeout` in JavaScript?

जावास्क्रिप्ट में सेटटाइमआउट का उपयोग करना और इसके साथ संदर्भ को संरक्षित करना

जावास्क्रिप्ट में सेटटाइमआउट फ़ंक्शन का उपयोग करते समय, यह जानना आवश्यक है कि यह कैसे संभालता है इसका संदर्भ. यह विशेष रूप से तब प्रासंगिक हो जाता है जब टाइमआउट कॉलबैक के भीतर एक अलग संदर्भ में परिभाषित कॉलिंग विधियों को। . प्रारंभ में, विधि 2 सफलतापूर्वक निष्पादित होती है। हालाँकि, सेटटाइमआउट विलंब के बाद, एक त्रुटि उत्पन्न होती है क्योंकि मेथड2 फ़ंक्शन अब इच्छित संदर्भ में परिभाषित नहीं है।

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

समाधान:

टाइमआउट कॉलबैक के भीतर इसके इच्छित संदर्भ को संरक्षित करने के लिए, आप संदर्भ की बाइंडिंग को स्पष्ट रूप से सेट करने के लिए .bind() विधि का उपयोग कर सकते हैं। सेटटाइमआउट में पास किए जा रहे फ़ंक्शन के अंत में .bind(this) जोड़कर, आप यह सुनिश्चित कर सकते हैं कि कॉलबैक फ़ंक्शन के भीतर यह इच्छित संदर्भ को संदर्भित करता है।

अद्यतन कोड स्निपेट में:

test.prototype.method = फ़ंक्शन() { //विधि2 पास की गई आईडी के आधार पर छवि लौटाता है this.method2('useSomeElement').src = "http://www.some.url"; टाइमडिले = window.setTimeout(this.method.bind(this), 5000); // ^^^^^^^^^^^

test.prototype.method = function()
{
    //method2 returns image based on the id passed
    this.method2('useSomeElement').src = "http://www.some.url";
    timeDelay = window.setTimeout(this.method.bind(this), 5000);
    //                                       ^^^^^^^^^^^ <- fix context
};
विज्ञप्ति वक्तव्य यह आलेख यहां पुनर्मुद्रित है: 1729735296 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.कॉम से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

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

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

Copyright© 2022 湘ICP备2022001581号-3