ये ट्यूट-प्रीमियम Jquery vid ट्यूटोरियल से लिया जाता है।
http://tutsplus.com/lesson/the-this-keyword/ जेफ बताता है कि 'यह' हर बार किस बात का जिक्र कर रहा है लेकिन मुझे यकीन नहीं है कि मैंने उन सभी के पीछे तर्क को समझ लिया है।'इस' के 4 अलग-अलग परिदृश्य। सही व्याख्या क्या है?
E.g. 1
function doSomething(e) {
e.preventDefault();
console.log(this);
}
$('a').on('click', doSomething);
इस मामले में (इस मामले में किया जा रहा है पैरेंट ऑब्जेक्ट)
"इस 'एक' तत्व को संदर्भित करता है" मुझे लगता है कि क्योंकि यहां बयान के बराबर है:
$('a').on('click', function (e) {
e.preventDefault();
console.log(this);
}
तो 'ए' मूल वस्तु
ईजी है 2
var obj = {
doIt: function(e){
e.preventDefault();
console.log(this);
}
}
$('a').on('click', obj.doIt);
इस मामले में (* लेकिन जाहिरा तौर पर यह पैरेंट ऑब्जेक्ट नहीं है?) "यह अभी भी 'एक' तत्व को संदर्भित करता है"
यही वह समय लगता है हम एक विधि लेकिन कॉल कर रहे हैं कथन अभी भी वही चीज़ के बराबर है जैसे ईजी 1
* ट्यूटोरियल में एक चीज़ मुझे थोड़ा उलझन में डालती है। मैंने सोचा कि 'यह' हमेशा मूल वस्तु को संदर्भित करता है, इसलिए इस मामले में 'ए' अभी भी मूल वस्तु है। लेकिन (ट्यूटोरियल में 05.23 पर) वह अनुमान लगाता है कि यह मामला नहीं है, "कई बार ऐसा हो सकता है जब आप चाहते हैं कि यह 'इसके' मूल ऑब्जेक्ट को संदर्भित करे जो 'ओब्जे' होगा, जिसमें वह घटना बनाते हैं .3।
E.g.
$('a').on('click', function(){
function(){ console.log(this);}
};
e.preventDefault();
: 3
var obj = {
doIt: function(){
console.log(this);
}
}
$('a').on('click', function(e){
obj.doIt();
};
e.preventDefault();
इस मामले में
मैं तथ्य यह है कि 'इस' एक नेस्टेड समारोह में है के रूप में इस बयान के बराबर के साथ करने के लिए इस अनुमान "इस obj वस्तु को संदर्भित करता है"
मुझे वास्तव में समझ में नहीं आ रहा है कि क्यों, विशेष रूप से जैसा कि मैंने एक लेख में पढ़ा है कि नेस्टेड फ़ंक्शंस 'यह' में अपना रास्ता खो देता है और हेड ऑब्जेक्ट (विंडो ऑब्जेक्ट) को संदर्भित करता है "।
Eg4
var obj = {
doIt: function(){
console.log(this);
}
}
$('a').on('click', function(e){
obj.doIt.call(this);
e.preventDefault();
});
इस मामले में
"यह 'एक' का अर्थ है" जावास्क्रिप्ट निश्चित गाइड "दोनों कॉल (करने के लिए पहला तर्क के अनुसार) है जिस पर वस्तु है समारोह को लागू किया जाना है " यहां" यह "पहली तर्क के रूप में प्रयोग किया जाता है। लेकिन "यह" वह वस्तु नहीं है जिस पर फ़ंक्शन लागू किया जाना है ??
मुझे लगता है कि मुझे लगता है कि कॉल फ़ंक्शन फ़ंक्शन का आह्वान करने के लिए है और एक पॉइंटर के रूप में अपने पहले पैरामीटर का उपयोग किसी ऑब्जेक्ट पर करता है लेकिन मुझे नहीं लगता कि 'इस' का उपयोग क्यों करना है कि फ़ंक्शन 'ए' द्वारा लागू किया जाता है। यह कुछ ऐसा नहीं है जिसे मैंने अन्य कॉल() उदाहरणों में देखा है।
इस तरह के एक विशाल पद के लिए खेद है।उम्मीद है कि कोई भी इस चरण से अभी भी पढ़ रहा है ...
+1 क्योंकि मेरे जवाब देने के लिए यहां बहुत देर हो चुकी है इस उत्कृष्ट सवाल में आईएनजी। इसमें कोई संदेह नहीं है कि कोई और जल्द ही होगा - यह एक महत्वपूर्ण बिंदु है और वह आम तौर पर जेएस ट्यूटोरियल में खराब रूप से कवर किया जाता है। – jimw
* "मैंने सोचा था कि 'इस' हमेशा पैरेंट ऑब्जेक्ट को संदर्भित करता है ..." * कोई, 'माता पिता वस्तु के रूप में this' का नहीं लगता। इसके बारे में एक * कॉलिंग संदर्भ के रूप में सोचें * जिसका मूल्य कई अलग-अलग तरीकों से सेट किया जा सकता है, जिसमें से एक ऑब्जेक्ट से एक विधि को कॉल करना होता है। –