उनके मामले में:
(function() { /* do stuff */ }).call(this);
... वे सुनिश्चित करें कि समारोह this
के लिए एक विशिष्ट मूल्य के साथ कहा जाता हो जाता है कि कर रहे हैं (जैसे, this
समारोह के भीतर की this
बाहर के रूप में ही किया जाएगा समारोह)।
आपके मामले में: क्योंकि आप इसे कुछ भी है कि सेट this
कर बिना कहा है
(function($) { /* do stuff */ })(jQuery);
... this
अपने समारोह के भीतर वैश्विक वस्तु हो जाएगा, और इसलिए वैश्विक वस्तु को this
चूक (window
, ब्रॉवर्स पर)।
जावास्क्रिप्ट में, this
पूरी तरह से एक फ़ंक्शन कहलाता है द्वारा सेट किया गया है। वहाँ दो मुख्य तरीके हैं:
अभिव्यक्ति है कि यह एक वस्तु की संपत्ति से प्राप्त करता है, उदाहरण के लिए के हिस्से के रूप कार्यप्रणाली को कॉल करके
obj.foo(); // Or `obj["foo"]();
उस मामले में, foo
करने के लिए कॉल के भीतर, this
obj
के पास भेजेगा।
के माध्यम से कार्यप्रणाली को कॉल करके अपनी निर्मित call
या apply
तरीके:
var obj = {name: "Fred"};
function foo(salutation, punctuation) {
alert(salutation + " " + this.name + punctuation);
}
foo.call(obj, "Hi", "!"); // alerts "Hi Fred!"
foo.apply(obj, ["Hi", "!"]); // Also alerts "Hi Fred!"
call
और apply
कैसे आप समारोह आप कॉल कर रहे में पारित करने के लिए तर्क निर्दिष्ट है के बीच फर्क सिर्फ इतना है: call
के साथ , आप उन्हें this
मान के बाद बस अलग तर्क के रूप में सूचीबद्ध करते हैं; apply
के साथ, आप उन्हें एक सरणी के रूप में आपूर्ति करते हैं।
स्रोत
2011-11-22 17:29:44
हालांकि अगर यह 'कॉल (jQuery, jQuery)' था, तो यह दोनों सेट करेगा। – zzzzBov
@Phrogz धन्यवाद। मैं समझ गया। – modernzombie
@zzzzBov दोनों [jQuery ऑब्जेक्ट] होंगे, सही? – modernzombie