2011-08-29 8 views
15

का कारण क्या है मैं jquery में सबसे अच्छा नहीं हूं और मैं एक var प्रारंभिकता में आया हूं कि मुझे नहीं पता कि कोड लिखने वाले व्यक्ति ने ऐसा क्यों किया।

init में एक प्लगइन के लिए, हम

this.init = function(settings) { 
    var $this = this; 
    this.s = { 
     initialSlide: 0, 
     firstSlide: true, 
    }; 
    ... more code, some uses $this, some uses "this" 
} 

तो क्या फर्क यहाँ है के बीच "$ इस" और "इस" और एक या अन्य हर समय का उपयोग क्यों नहीं है?

+0

हाँ यह करता है, यह एक jquery idiom –

+0

@Matt है: कोड में कोई jQuery नहीं है। "यह' को अन्य चर में असाइन करना" सादे जावास्क्रिप्ट "में भी बहुत आम है। –

+0

@ फ़ेलिक्स: यह एक प्लगइन है, जिसका अर्थ है कि यह एक jquery वस्तु को संदर्भित करता है। $ Jquery ऑब्जेक्ट्स को प्रत्ययित करने के लिए एक jquery idiom है (या इस्तेमाल किया जाता है)। इसलिए, यह एक jquery सवाल है। यदि यह गैर-jquery थे, तो इसके बजाय आप शायद यह देखेंगे कि, स्वयं, या कुछ और वर्णनात्मक है कि इसका वास्तव में क्या मतलब है –

उत्तर

31

आम तौर पर, इस this की एक प्रति का मतलब है। this के बारे में बात यह है कि यह प्रत्येक फ़ंक्शन के भीतर बदल जाता है। हालांकि, इसे इस तरह से संग्रहीत करना $this बदलता रहता है जबकि this बदलता है।

jQuery अत्यधिक जादू का उपयोग करता है this मूल्य।

$.fn.doSomethingWithElements = function() { 
    var $this = this; 

    this.each(function() { 
     // `this` refers to each element and differs each time this function 
     // is called 
     // 
     // `$this` refers to old `this`, i.e. the set of elements, and will be 
     // the same each time this function is called 
    }); 
}; 
+0

आप इसे $ कैसे लिखते हैं? jQuerythis ?? – Hitesh

+1

var $ यह किसी भी अन्य परिवर्तनीय नाम के रूप में है, $ और यह एक और व्यक्ति है जो कोड को पढ़ता है यह जानने के लिए कि वेरिएबल पेज को और नीचे क्या करता है। संक्षेप में, हाँ, आप 'var jQuerythis' लिख सकते हैं लेकिन इससे वास्तव में कोई फर्क नहीं पड़ता है। आप पुरानी jQuery में भी $ का उपयोग कर सकते हैं, जैसा कि $ के ऊपर बताया गया है कि यह jQuery निर्भर नहीं है, यह 'इस' की एक प्रति बनाने का एक तरीका है। –

5

इस मामले में, कुछ भी नहीं। $this सिर्फ एक और परिवर्तनीय घोषणा है जिसमें this इसे सौंपा गया है।

आमतौर पर, मैंने this को लपेटते समय जावास्क्रिप्ट पुस्तकालयों का उपयोग करके लोगों द्वारा उपयोग किया जाने वाला यह शॉर्टकट देखा है। उदाहरण के लिए, jQuery में विशिष्ट उपयोग होगा:

// rather than writing $(this) everywhere 
var $this = $(this); 

$this.each(function(){ 
    // Do Something 
}); 
0

यह इस मामले में कुछ भी नहीं है इसका मतलब है (कोई यमक इरादा):

की तरह आप देख रहे हैं जहां कुछ जरूरत हो सकती है इस कोड, पर विचार करें। अगर कथन var $this = $(this) था तो यह अधिक तार्किक होगा क्योंकि इससे सभी अच्छी jQuery कार्यक्षमता का उपयोग किया जा सकेगा।

+0

गलत, इसे एक अलग चर पर पुन: असाइन करने से आंतरिक दायरे को संदर्भित करने के लिए आंतरिक बंद करने की अनुमति मिलती है। – Evert

0

अन्य सभी ने क्या कहा, jquery कोड में $ id के साथ उपसर्ग करने के लिए jquery कोड में एक मुहावरे भी है। यह नहीं पता कि यह कितना लोकप्रिय है, लेकिन इसमें बहुत कुछ देखने के लिए उपयोग किया जाता है।

0

मैं $ = $ (यह) करता हूं क्योंकि ऐसा लगता है कि यह हर बार उस कॉल की वास्तविक प्रसंस्करण को सहेज लेगा जिसे आप इसका उपयोग करना चाहते हैं।

इसके अलावा, 'जादू' के लिए यह '' फ़ंक्शन जिसे किसी और ने उल्लेख किया है। मूल प्रतिलिपि को चारों ओर रखना आसान है।

0

वास्तविकता में jQuery जावास्क्रिप्ट डीओएम के चारों ओर एक रैपर है, दोनों इसे बढ़ाने और सरलीकृत करने के लिए। बहुत संक्षेप में JQuery चयनकर्ताओं JQuery वस्तु लौट

var jQueryResults = $("article"); //Contains all article elements in the DOM as JQuery objects 

हालांकि, रिटर्न जावास्क्रिप्ट के साथ तत्वों का चयन एचटीएमएल डोम तत्वों यानी/एस यानी

var normalResults = document.getElementsByTagName("article");//Contains all article elements in the DOM as HTML objects 

मुद्दों है कि डोम वस्तुओं में उत्पन्न होती ही कार्यक्षमता प्रदान नहीं करते हैं कि JQuery ऑब्जेक्ट्स प्रदान करते हैं।

$('.changeColorHover').hover(function() { 
    this.attr("style", "color:red"); 
}); //Will not work as we are trying to call a JQuery method on a DOM object 
ऊपर मन में उल्लेख के साथ

'इस' कीवर्ड एक डोम वस्तु है और इस तरह आप क्रम में एक jQuery वस्तु को यह कन्वर्ट करने के लिए आवश्यक हैं:

यहाँ एक घटना उदाहरण जो अंतर को दिखाता है jQuery विधियों का उपयोग करने के लिए।

$('.changeColorHover').hover(function() { 
     $(this).attr("style", "color:red"); 
}); //Will work since we have first converted the DOM object to a JQuery object 

इस कीवर्ड सारांश में,, आप उद्देश्य यह है कि घटना कहा जाता है, इस ऑब्जेक्ट कि घटना उठाया के लिए एक संदर्भ दे देंगे का उपयोग करने की अनुमति देता है। लेकिन, यह एक डॉम ऑब्जेक्ट है, एक jQuery ऑब्जेक्ट नहीं। नतीजतन, आप जिस jQuery विधियों का उपयोग करना चाहते हैं, वे उपलब्ध नहीं हैं, जब तक कि आप इसे किसी jQuery ऑब्जेक्ट में परिवर्तित न करें।