जवाबों:
JQuery में, fn
संपत्ति संपत्ति का सिर्फ एक उपनाम है prototype
।
jQuery
पहचानकर्ता (या $
) सिर्फ एक है निर्माता समारोह , और इसके साथ बनाई गई सभी उदाहरणों, निर्माता के प्रोटोटाइप से विरासत।
एक साधारण निर्माण कार्य:
function Test() {
this.a = 'a';
}
Test.prototype.b = 'b';
var test = new Test();
test.a; // "a", own property
test.b; // "b", inherited property
एक साधारण संरचना जो jQuery के आर्किटेक्चर से मिलती जुलती है:
(function() {
var foo = function(arg) { // core constructor
// ensure to use the `new` operator
if (!(this instanceof foo))
return new foo(arg);
// store an argument for this example
this.myArg = arg;
//..
};
// create `fn` alias to `prototype` property
foo.fn = foo.prototype = {
init: function () {/*...*/}
//...
};
// expose the library
window.foo = foo;
})();
// Extension:
foo.fn.myPlugin = function () {
alert(this.myArg);
return this; // return `this` for chainability
};
foo("bar").myPlugin(); // alerts "bar"
function func1 (a) { ... }
होगा, और एक प्रॉपर्टी यहाँ 'a' वेरिएबल होगी var foo = {}; foo.a = 'a'
।
jQuery.fn
के लिए आशुलिपि परिभाषित किया गया है jQuery.prototype
। से स्रोत कोड :
jQuery.fn = jQuery.prototype = {
// ...
}
इसका मतलब jQuery.fn.jquery
है कि एक उपनाम है jQuery.prototype.jquery
, जो वर्तमान jQuery संस्करण लौटाता है। स्रोत कोड से फिर :
// The current version of jQuery being used
jquery: "@VERSION",
fn
शाब्दिक रूप से jquery को संदर्भित करता है prototype
।
कोड की यह पंक्ति स्रोत कोड में है:
jQuery.fn = jQuery.prototype = {
//list of functions available to the jQuery api
}
लेकिन पीछे असली उपकरण fn
अपनी उपलब्धता को jQuery में हुक करने की उपलब्धता है। याद रखें कि jquery आपके कार्य के लिए मूल क्षेत्र this
होगा , इसलिए jquery ऑब्जेक्ट को संदर्भित करेगा।
$.fn.myExtension = function(){
var currentjQueryObject = this;
//work with currentObject
return this;//you can include this if you would like to support chaining
};
तो यहाँ इसका एक सरल उदाहरण है। आइए कहते हैं कि मैं दो एक्सटेंशन बनाना चाहता हूं, एक जो नीले रंग की सीमा डालता है, और जो टेक्स्ट को नीला रंग देता है, और मैं चाहता हूं कि वे जंजीरदार हों।
jsFiddle Demo
$.fn.blueBorder = function(){
this.each(function(){
$(this).css("border","solid blue 2px");
});
return this;
};
$.fn.blueText = function(){
this.each(function(){
$(this).css("color","blue");
});
return this;
};
अब आप एक वर्ग के खिलाफ इस तरह का उपयोग कर सकते हैं:
$('.blue').blueBorder().blueText();
(मुझे पता है कि यह सीएसएस के साथ सबसे अच्छा किया जाता है जैसे कि विभिन्न वर्ग नाम लागू करना, लेकिन कृपया ध्यान रखें कि यह अवधारणा दिखाने के लिए सिर्फ एक डेमो है)
इस उत्तर में पूर्ण विस्तार का एक अच्छा उदाहरण है।
each
अपने उदाहरण कोड में सिर्फ छोड़ नहीं सकते ? $.fn.blueBorder = function(){ this.css("border","solid blue 2px"); return this; };
ठीक काम करेगा, जैसा कि .css()
एलरडी तत्वों पर निर्भर करता है।
css
फ़ंक्शन स्वचालित रूप से प्रत्येक के साथ आंतरिक रूप से उन पर पुनरावृति करेगा। यह उन मतभेदों को दर्शाने का एक उदाहरण था this
जहां बाहरी एक jquery वस्तु है और आंतरिक एक तत्व को संदर्भित करता है।
JQuery स्रोत कोड हम में jQuery.fn = jQuery.prototype = {...}
के बाद से jQuery.prototype
एक वस्तु है का मूल्य jQuery.fn
केवल एक ही उद्देश्य यह है कि के लिए एक संदर्भ हो जाएगाjQuery.prototype
पहले से ही संदर्भ।
इसकी पुष्टि करने के लिए आप जांच कर सकते हैं jQuery.fn === jQuery.prototype
कि क्या मूल्यांकन true
(जो यह करता है) तो वे उसी वस्तु का संदर्भ देते हैं