दिलचस्प पोस्ट
स्विफ्ट में मापदंडों के साथ छवि अपलोड करें मैं कोने 2 में "चयन" में नया चयन कैसे प्राप्त करूं? जावा में एक अर्रे का ही हिस्सा मिलता है? एसक्यूएल अल्केमी फिल्टर में स्ट्रिंग चर में डायनामिक रूप से स्तंभ नाम कैसे देना है? Cassandra में विभाजन कुंजी, समग्र कुंजी और क्लस्टरिंग कुंजी के बीच का अंतर? क्या मैटलॉग के डेटर्सर्समोड के एक मैटलप्लिब समकक्ष है? कैसे मेरी क्लिप-पथ में सीमा जोड़ने के लिए: बहुभुज (); सीएसएस शैली एंड्रॉइड में एईएस एन्क्रिप्शन का उपयोग करने के लिए सबसे अच्छा क्या है? क्या मैं Visual Studio 2008 में .NET Framework 4 के लिए विकसित कर सकता हूं? अपाचे स्पार्क: नक्शा बनाम नक्शाविभाजनों? सेलेनियम वेबड्रिवर का उपयोग करके ब्राउज़रों में <input type = file> पर कैसे क्लिक करें? फ़ोन 4.4 गैलेक्सी कैमरा प्लगइन का उपयोग करते हुए एंड्रॉइड 4.4 (किटकैट) पर गैलरी से चयनित होने पर छवि को लोड करने में असमर्थ एंड्रॉइड सूचीदृश्य को रीफ्रेश करने के लिए कैसे? देखें का चयन FROM खंड में एक subquery शामिल है एंड्रॉइड वॉली – बेसिकनेटवर्क.परफ़ॉर्मरिक्स्ट: अनपेक्षित प्रतिसाद कोड 400

जावास्क्रिप्ट सेटइनर्वर और `यह` समाधान

मुझे अपने सेट setInterval हैंडलर से this तक पहुंच की आवश्यकता है

 prefs: null, startup : function() { // init prefs ... this.retrieve_rate(); this.intervalID = setInterval(this.retrieve_rate, this.INTERVAL); }, retrieve_rate : function() { var ajax = null; ajax = new XMLHttpRequest(); ajax.open('GET', 'http://xyz.com', true); ajax.onload = function() { // access prefs here } } 

मैं ajax.onload में इस ajax.onload उपयोग कैसे कर सकता हूं?

Solutions Collecting From Web of "जावास्क्रिप्ट सेटइनर्वर और `यह` समाधान"

सेट इन्टरलाइन लाइन इस तरह दिखनी चाहिए: –

  this.intervalID = setInterval( (function(self) { //Self-executing func which takes 'this' as self return function() { //Return a function in the context of 'self' self.retrieve_rate(); //Thing you wanted to run as non-window 'this' } })(this), this.INTERVAL //normal interval, 'this' scope not impacted here. ); 

संपादित करें : वही सिद्धांत " onload " पर लागू होता है इस मामले में इसके "बाहरी" कोड के लिए थोड़ा सा काम करना है, यह केवल अनुरोध सेट करता है और फिर उसे भेजता है। इस मामले में उपरोक्त कोड के रूप में अतिरिक्त ओवरहेड एक अतिरिक्त कार्य है जो अनावश्यक है। आपके पुनः प्राप्त_एटर को इस तरह दिखना चाहिए: –

 retrieve_rate : function() { var self = this; var ajax = new XMLHttpRequest(); ajax.open('GET', 'http://xyz.com', true); ajax.onreadystatechanged= function() { if (ajax.readyState == 4 && ajax.status == 200) { // prefs available as self.prefs } } ajax.send(null); } 
 this.intervalID = setInterval(this.retrieve_rate.bind(this), this.INTERVAL); 

सेट setInterval का डिफ़ॉल्ट व्यवहार वैश्विक संदर्भ से setInterval है। आप वर्तमान संदर्भ की एक प्रतिलिपि सहेजकर सदस्य फ़ंक्शन कॉल कर सकते हैं। इन चर को प्राप्त करने के अंदर ठीक से मूल संदर्भ के लिए बाध्य किया जाएगा। आपका कोड ऐसा दिखता है:

 var self = this; this.intervalID = setInterval( function() { self.retrieve_rate(); }, this.INTERVAL); 

बोनस टिप: एक सादा फ़ंक्शन संदर्भ के लिए (किसी वस्तु संदर्भ के विपरीत जो एक सदस्य फ़ंक्शन है) आप जावास्क्रिप्ट के call का उपयोग करके या विधि apply कर apply

ब्राउज़र समर्थन को सुधारने के साथ, समय ठीक से ईकामास्क्रिप्ट 6 एन्हांसमेंट, एरो => विधि का उपयोग करने के लिए अच्छा है, this ठीक से संरक्षित करने के लिए

 startup : function() { // init prefs ... this.retrieve_rate(); this.intervalID = setInterval( () => this.retrieve_rate(), this.INTERVAL); }, 

retrieve_rate() को अंतराल के द्वारा बुलाया जाता है तो => विधि का उपयोग करके this संरक्षित किया जाता है। कायरता स्वयं के लिए कोई ज़रूरत नहीं है या this पैरामीटर में गुजर रहा है

window.setInterval(function(){console.log(this)}.bind(this), 100)

यह जावास्क्रिप्ट में कानूनी है और बहुत सी कोड बचाता है 🙂

 prefs: null, startup : function() { // init prefs ... this.retrieve_rate(); var context = this; this.intervalID = setInterval(function() { context.retrieve_rate(); }, this.INTERVAL); }, retrieve_rate : function() { var ajax = null; ajax = new XMLHttpRequest(); ajax.open('GET', 'http://xyz.com', true); var context = this; ajax.onload = function() { // access prefs using context. // eg context.prefs } } 

यह सबसे साफ समाधान होगा, चूंकि अधिकांश समय आप वास्तव में अपने संदर्भ पद्धति कॉल के लिए इस संदर्भ को बदलना चाहते हैं:

इसके अलावा अवधारणा को समझना भी आसान है।

  // store scope reference for our delegating method var that = this; setInterval(function() { // this would be changed here because of method scope, // but we still have a reference to that OURMETHODNAME.call(that); }, 200); 

यह एक सौंदर्य समाधान नहीं है लेकिन यह आम उपयोग में है:

 var self = this; var ajax = null; //... ajax.onload = function() { self.prefs....; }