मैं कई स्रोत कोड में देखा था:जावास्क्रिप्ट "मुझे" = "यह", क्यों?
var me = this;
Ext-जे एस 4 (जे एस ढांचे) में विशेष रूप से। ऐसी चीज क्यों कर रही है? क्या कोई अन्य कारण है या आप सिर्फ एक चर के लिए "यह" के बजाय "मुझे" कहलाते हैं?
धन्यवाद।
मैं कई स्रोत कोड में देखा था:जावास्क्रिप्ट "मुझे" = "यह", क्यों?
var me = this;
Ext-जे एस 4 (जे एस ढांचे) में विशेष रूप से। ऐसी चीज क्यों कर रही है? क्या कोई अन्य कारण है या आप सिर्फ एक चर के लिए "यह" के बजाय "मुझे" कहलाते हैं?
धन्यवाद।
आमतौर पर आप this
पर एक दायरे के अंदर संदर्भ रख सकते हैं जिसमें this
कुछ और संदर्भित करता है (उदाहरण के लिए कॉलबैक फ़ंक्शन की तरह)। में
var MyClass = function (elem) {
this.elem = elem;
this.name = "James";
elem.addEventListener("click", function() {
alert(this.name); //oops
}, false);
};
अब इस उदाहरण पर विचार करें,:
इस उदाहरण है, जिसमें क्लिक ईवेंट हैंडलर समारोह आप क्या उम्मीद कर सकते हैं करने के लिए एक अलग संदर्भ है पर विचार करें (this
MyClass
का एक उदाहरण का उल्लेख नहीं करता) जो हम निर्माता समारोह अंदर this
का मूल्य के लिए एक संदर्भ की दुकान है, और का उपयोग करें कि कॉलबैक फ़ंक्शन के अंदर:
var MyClass = function (elem) {
var me = this;
this.elem = elem;
this.name = "James";
elem.addEventListener("click", function() {
alert(me.name); //works!
}, false);
};
कॉलबैक फ़ंक्शन एक चर था उल्लेख कर सकते हैं उस समारोह के बाद भी बाहरी समारोह में घोषित किया गया है (MyClass
कन्स्ट्रक्टर रिटर्न जैसे ही इसे addEventListener
निष्पादित किया गया है)। यह बंद का प्रदर्शन है।
मैं समझता हूं और आपको धन्यवाद देता हूं। :) –
@ user1509885 - आपका स्वागत है, खुशी है कि मैं मदद कर सकता हूं :) –
आपने दूसरों के मुकाबले अपने उत्तर में अधिक जानकारी दी है, इसलिए यह उत्तर स्वीकार्य के रूप में चिह्नित किया जाएगा। बस 4 और मिनट ... दाहा ... –
मूल रूप से यह जावास्क्रिप्ट में बंद का उपयोग करता है। Read this about closure.
इसका उपयोग this
के विशेष उदाहरण को this
पर एक अलग अर्थ रखने के लिए किया जाता है।
समझें। धन्यवाद। :) –
हालांकि निश्चित रूप से बंद करने के लिए यह अधिक स्पष्ट कारण है, मैं बस एक और कारण जोड़ना चाहता हूं कि जावास्क्रिप्ट फ़ाइल के minified संस्करण के आकार को कम किया जा सके।
this
किसी कीवर्ड के रूप में फ़ाइल को छोटा करने की प्रक्रिया में बदला नहीं जा सकता है, जबकि स्थानीय चर कर सकते हैं। दूसरे शब्दों में, जब भी आप इसका उपयोग करेंगे (4 अक्षर), इसके बजाय 1 वर्ण स्थानीय चर का उपयोग किया जा सकता है।
निम्न में से example function पर विचार करें ExtJS के Ext.data.Store
:
filterBy: function(fn, scope) {
var me = this;
me.snapshot = me.snapshot || me.data.clone();
me.data = me.queryBy(fn, scope || me);
me.fireEvent('datachanged', me);
me.fireEvent('refresh', me);
}
और उसके minified संस्करण (कोई बंद यहाँ शामिल है ध्यान दें):
filterBy:function(b,a){var c=this;c.snapshot=c.snapshot||c.data.clone();c.data=c.queryBy(b,a||c);c.fireEvent("datachanged",c);c.fireEvent("refresh",c)}
(151 पात्रों/बाइट्स)
अब, इसकी तुलना करें न्यूनतम किया संस्करण के लिए अगर हम एक स्थानीय चर के लिए this
आवंटित नहीं किया:
filterBy:function(b,a){this.snapshot=this.snapshot||this.data.clone();this.data=this.queryBy(b,a||this);this.fireEvent("datachanged",this);this.fireEvent("refresh",this)}
(170 पात्रों/बाइट्स)
आप एक स्थानीय चर के साथ संस्करण देख सकते हैं केवल के आकार के 88% लेता है फ़ंक्शन जो प्रत्येक बार this
का उपयोग करता है।
विशेष रूप से बड़ी पुस्तकालयों में यह फ़ाइल आकार को थोड़ा कम कर सकता है।
[+1] ExtJS बहुत सारे कार्यों में 'var me = this' का उपयोग करता है जबकि बंद होने की शायद ही आवश्यकता होती है। ऐसा लगता है कि 'i' का उपयोग तब किया जाता है जब एक से अधिक' यह 'की आवश्यकता होती है। – Skrol29
me=this
सेट करने से आपको एक आंतरिक दायरे में एक बाहरी दायरे से this
चर का उपयोग करने के लिए अनुमति देता है।
var Outer= function() {
var me = this;
me.x = "outerx";
me.inner = {
x: "innerx",
displayValues: function() {
console.log(me.x); //outerx
console.log(this.x); //innerx
}
};
};
new Outer().inner.displayValues();
इसका उपयोग क्लोजर या कॉलबैक में किया जाता है, जब अज्ञात फ़ंक्शन के अंदर 'यह' परिवर्तन का संदर्भ होता है। अधिक बार, आप देखेंगे 'var = = –
ओह, मैं समझता हूं। इसे फ़ंक्शन के अंदर बदला जा सकता है ... अच्छा धन्यवाद। :) –