दिलचस्प पोस्ट
एंड्रॉइड: स्क्रॉलव्यू बल से नीचे एंड्रॉइड ऐप अपडेट करें (Google Play के बिना) एपीके फ़ाइल का कोड निकालने का तरीका jQuery ओवरराइड डिफ़ॉल्ट सत्यापन त्रुटि संदेश प्रदर्शन (सीएसएस) पॉपअप / टूलटिप जैसे कीजिए पायथन में अंडाकार स्लाइसिंग सिंटैक्स का उपयोग कैसे करें? जावा: पारदर्शी पिक्सेल के साथ एक बुफ़ेदार छवि भरना ओपनफ़ाइलऑटपुट में क्या गलत है एंड्रॉइड? आईपी ​​पता कैसे प्राप्त करें? सीएसएस में एक सर्कल सेक्टर कैसे खींचना है? फ़ाइल को केवल पढ़ने के लिए खोलें नेटबीन "कनेक्शन के लिए प्रतीक्षा कर रहा है" (नेटबीन-एक्सएडीबुग) दिखाता है " IDisposable को सही ढंग से कार्यान्वित करना ऑफ़लाइन उपयोग के लिए Google मानचित्र टाइल कैश कैसे करें? एक ही कार्यक्रम में कॉट और wcout मिश्रण आईओएस आवेदन में चेकबॉक्स

टाइम-टाइम कॉलबैक सेट करने के लिए सही "यह" संदर्भ पास करें?

मैं setTimeout में संदर्भ कैसे पास कर सकता हूं? मैं इस this.tip.destroy() को कॉल करना चाहता हूं यदि यह this.options.destroyOnHide 1000 ms के बाद मैं उसे कैसे कर सकता हूँ?

 if (this.options.destroyOnHide) { setTimeout(function() { this.tip.destroy() }, 1000); } 

जब मैं ऊपर की कोशिश करता हूँ, this खिड़की को संदर्भित करता है।

Solutions Collecting From Web of "टाइम-टाइम कॉलबैक सेट करने के लिए सही "यह" संदर्भ पास करें?"

आपको संदर्भ के संदर्भ को सहेजने की आवश्यकता है जहां setTimeout फ़ंक्शन कॉल किया जाता है, क्योंकि setTimeout फ़ंक्शन को वैश्विक ऑब्जेक्ट की ओर इंगित करता है:

 var that = this; if (this.options.destroyOnHide) { setTimeout(function(){that.tip.destroy()}, 1000); } 

आप आसानी से साबित कर सकते हैं कि setTimeout this पर वैश्विक ऑब्जेक्ट को सेट this :

 (function () { alert(this); // alerts hello setTimeout(function(){ alert(this == window); // true }, 1000); }).call("hello"); 

यह भी देखें:

  • setTimeout – 'यह' समस्या

फ़ंक्शन आवरण @ सीएमएस के साथ तैयार शॉर्टकट (वाक्यविन्यास चीनी) के साथ उत्तर दिया गया है। (यह मानते हुए कि आपके इच्छित संदर्भ this.tip है this.tip ।)


ECMAScript 5 ( वर्तमान ब्राउज़र , नोड। जेएस) और प्रोटोटाइप.जे.एस.

यदि आप ईसीएमए -262, 5 वें संस्करण (ईसीएमएस्क्रिप्ट 5) या नोड.जेएस के साथ संगत ब्राउज़र को लक्षित करते हैं, तो आप फंक्शन.प्रोटोटाइप.बिंड का उपयोग कर सकते हैं। आंशिक फ़ंक्शंस बनाने के लिए आप वैकल्पिक रूप से किसी भी फ़ंक्शन तर्क को पारित कर सकते हैं।

 fun.bind(thisArg[, arg1[, arg2[, ...]]]) 

फिर, आपके मामले में, यह प्रयास करें:

 if (this.options.destroyOnHide) { setTimeout(this.tip.destroy.bind(this.tip), 1000); } 

समान कार्यक्षमता भी प्रोटोटाइप (किसी भी अन्य पुस्तकालयों में?) में लागू की गई है

Function.prototype.bind को इस तरह कार्यान्वित किया जा सकता है यदि आप कस्टम पीछे की ओर संगतता चाहते हैं (लेकिन नोटों को देखें)।


ECMAScript 2015 ( कुछ ब्राउज़र , Node.js 5.0.0+)

अत्याधुनिक विकास (2015) के लिए आप वसा तीर फ़ंक्शंस का उपयोग कर सकते हैं, जो ECMAScript 2015 (सद्भाव / ES6 / ES2015) विनिर्देशन ( उदाहरण ) का हिस्सा हैं।

फ़ंक्शन अभिव्यक्ति की तुलना में एक तीर फ़ंक्शन अभिव्यक्ति (जिसे वसा तीर फ़ंक्शन के रूप में भी जाना जाता है) की एक छोटी सिंटैक्स है और this मान को बोलने से बाध्य किया जाता है […]।

 (param1, param2, ...rest) => { statements } 

आपके मामले में, यह प्रयास करें:

 if (this.options.destroyOnHide) { setTimeout(() => { this.tip.destroy(); }, 1000); } 

jQuery

यदि आप पहले से ही jQuery 1.4+ का उपयोग कर रहे हैं, तो फ़ंक्शन के this संदर्भ को स्पष्ट रूप से सेट करने के लिए एक तैयार किया गया फ़ंक्शन है।

jQuery.proxy () : एक फ़ंक्शन लेता है और एक नया वाला देता है जो हमेशा एक विशेष संदर्भ रखता है

 $.proxy(function, context[, additionalArguments]) 

आपके मामले में, यह प्रयास करें:

 if (this.options.destroyOnHide) { setTimeout($.proxy(this.tip.destroy, this.tip), 1000); } 

अंडरस्कोर.जेएस , रद्दीश

यह अंडरस्कोर.जेएस में उपलब्ध है, साथ ही साथ लॉन्श, _.bind(...) 1 , 2 के रूप में

बाँध किसी फ़ंक्शन को किसी ऑब्जेक्ट में बांधा , जिसका अर्थ है कि जब भी फ़ंक्शन कहा जाता है, तो इसका मूल्य ऑब्जेक्ट होगा वैकल्पिक रूप से, उन्हें पूर्व-भरने के लिए फ़ंक्शन को बाध्य तर्क, जिसे आंशिक एप्लिकेशन भी कहा जाता है।

 _.bind(function, object, [*arguments]) 

आपके मामले में, यह प्रयास करें:

 if (this.options.destroyOnHide) { setTimeout(_.bind(this.tip.destroy, this.tip), 1000); } 

बाइंड करें jquery underscore.js बिगमास्क्रिप्ट -5 प्रोटोटाइपजेस नोड.जेएस

इंटरनेट एक्सप्लोरर के अलावा ब्राउज़र्स में, आप विलंब के बाद समारोह में पैरामीटर पारित कर सकते हैं:

 var timeoutID = window.setTimeout(func, delay, [param1, param2, ...]); 

तो, आप यह कर सकते हैं:

 var timeoutID = window.setTimeout(function (self) { console.log(self); }, 500, this); 

यह एक स्कोप लुकअप (समयबाह्य / अंतराल अभिव्यक्ति के बाहर एक चर में कैशिंग) की तुलना में प्रदर्शन के मामले में बेहतर है, और फिर एक बंद ( $.proxy या Function.prototype.bind का उपयोग कर) बना रहा है।

इसे वेबरेबिलिंग से आईईएस में काम करने के लिए कोड:

 /*@cc_on (function (modifierFn) { // you have to invoke it as `window`'s property so, `window.setTimeout` window.setTimeout = modifierFn(window.setTimeout); window.setInterval = modifierFn(window.setInterval); })(function (originalTimerFn) { return function (callback, timeout){ var args = [].slice.call(arguments, 2); return originalTimerFn(function () { callback.apply(this, args) }, timeout); } }); @*/ 

यदि आप underscore का उपयोग कर रहे हैं, तो आप bind उपयोग कर सकते bind

उदाहरण के लिए

 if (this.options.destroyOnHide) { setTimeout(_.bind(this.tip.destroy, this), 1000); } 

नोट: यह IE में काम नहीं करेगा

 var ob = { p: "ob.p" } var p = "window.p"; setTimeout(function(){ console.log(this.p); // will print "window.p" },1000); setTimeout(function(){ console.log(this.p); // will print "ob.p" }.bind(ob),1000);