जावास्क्रिप्ट में सेटटाइमआउट का उपयोग करना और इसके साथ संदर्भ को संरक्षित करना
जावास्क्रिप्ट में सेटटाइमआउट फ़ंक्शन का उपयोग करते समय, यह जानना आवश्यक है कि यह कैसे संभालता है इसका संदर्भ. यह विशेष रूप से तब प्रासंगिक हो जाता है जब टाइमआउट कॉलबैक के भीतर एक अलग संदर्भ में परिभाषित कॉलिंग विधियों को। . प्रारंभ में, विधि 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 };
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3