jQuery.fn和jQuery.prototype區(qū)別介紹
發(fā)現(xiàn)這里有個(gè)東西很難理解。
這里的 jQuery , jQuery.fn , jQuery,fn,init ,jQuery,prototype 都代表什么。
來(lái)看下jQuery的源碼是怎么樣定義的:
(function( window, undefined ) {
var jQuery = (function() {
// 構(gòu)建jQuery對(duì)象
var jQuery = function( selector, context ) {
return new jQuery.fn.init( selector, context, rootjQuery );
}
// jQuery對(duì)象原型
jQuery.fn = jQuery.prototype = {
constructor: jQuery,
init: function( selector, context, rootjQuery ) {
// something to do
}
};
// Give the init function the jQuery prototype for later instantiation
jQuery.fn.init.prototype = jQuery.fn;
// 合并內(nèi)容到第一個(gè)參數(shù)中,后續(xù)大部分功能都通過(guò)該函數(shù)擴(kuò)展
// 通過(guò)jQuery.fn.extend擴(kuò)展的函數(shù),大部分都會(huì)調(diào)用通過(guò)jQuery.extend擴(kuò)展的同名函數(shù)
jQuery.extend = jQuery.fn.extend = function() {};
// 在jQuery上擴(kuò)展靜態(tài)方法
jQuery.extend({
// something to do
});
// 到這里,jQuery對(duì)象構(gòu)造完成,后邊的代碼都是對(duì)jQuery或jQuery對(duì)象的擴(kuò)展
return jQuery;
})();
window.jQuery = window.$ = jQuery;
})(window);
這里我們可以看到:
var jQuery = function( selector, context ) {
return new jQuery.fn.init( selector, context, rootjQuery );
}
jQuery 其實(shí)jQuery.fn.init()返回一個(gè)對(duì)象。那么jquery.fn.init()返回的又是什么呢?
jQuery.fn = jQuery.prototype = {
constructor: jQuery,
init: function( selector, context, rootjQuery ) {
// something to do
}
};
就是從這里來(lái)的,一個(gè)javascript對(duì)象。
這里有個(gè)問(wèn)題。
jQuery.fn = jQuery.prototype
那么就是 將jQuery 的原型對(duì)象賦值給了 jQuery.fn。
再看下面:
jQuery.fn.init.prototype = jQuery.fn;
看到這里我有一個(gè)想法。就是 將jQuery.fn 給了 jQuery.fn.init.prototype.
那么在這之前jQuery.fn.init.prototype.是什么?
是不是沒(méi)有?這個(gè)時(shí)候它的原型是{};
那么為了可以去調(diào)用init外面的方法。就做了一個(gè)處理。
將jQuery.fn 賦值給jQuery.fn.init.prototype.這樣的話,
jQuery.fn.init.prototype的原型也就是jQuery的原型對(duì)象就是 jQuery.fn ( 注意jQuery = function(return new jQuery.fn.init()))。
賦值了以后。在調(diào)用的時(shí)候,當(dāng)init中沒(méi)有方法的時(shí)候,就會(huì)去原型函數(shù)中調(diào)用。
那么這樣的話。
你可能會(huì)想到這樣一個(gè)東東:
jQuery.extends()
jQuery.fn.extends()
我想你應(yīng)該明白它們的區(qū)別了吧。
jQuery.extends()是直接擴(kuò)展jQuery.而jQuery.fn.extends(),很明顯是擴(kuò)展的原型。
這就是為什么jQuery.fn.extends()中的大部分方法來(lái)自己于jQuery.extends()。
這里又將 jQuery.fn 賦值給了 jQuery.fn.init.prototype.
那么就有這樣的一個(gè)關(guān)系:
jQuery.prototype = jQuery.fn = jQuery.fn.init.prototype
- js中繼承的幾種用法總結(jié)(apply,call,prototype)
- js中的hasOwnProperty和isPrototypeOf方法使用實(shí)例
- js中prototype用法詳細(xì)介紹
- JavaScript prototype 使用介紹
- JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的區(qū)別和應(yīng)用場(chǎng)景簡(jiǎn)述
- Javascript中Array.prototype.map()詳解
- JavaScript中的prototype使用說(shuō)明
- 不錯(cuò)的一篇關(guān)于javascript-prototype繼承
- 找到了一篇jQuery與Prototype并存的沖突的解決方法
- prototype與__proto__區(qū)別詳細(xì)介紹
相關(guān)文章
用JQuery調(diào)用Session的實(shí)現(xiàn)代碼
用JQuery調(diào)用Session的實(shí)現(xiàn)代碼,需要的朋友可以參考下。2010-10-10
jQuery實(shí)現(xiàn)凍結(jié)表頭的方法
這篇文章主要介紹了jQuery實(shí)現(xiàn)凍結(jié)表頭的方法,實(shí)例分析了jQuery擴(kuò)展方法的實(shí)現(xiàn)技巧及固定表格樣式的方法,需要的朋友可以參考下2015-03-03
Jquery利用mouseenter和mouseleave實(shí)現(xiàn)鼠標(biāo)經(jīng)過(guò)彈出層且可以點(diǎn)擊
這篇文章主要介紹了Jquery利用mouseenter和mouseleave實(shí)現(xiàn)鼠標(biāo)經(jīng)過(guò)彈出層且可以點(diǎn)擊。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-02-02
jquery formValidator插件ajax驗(yàn)證 內(nèi)容不做任何修改再離開(kāi)提示錯(cuò)誤的bug解決方法
query formValidator插件非常好用,但是有一個(gè)嚴(yán)重的Bug,在使用ajax驗(yàn)證的時(shí)候,如果輸入框的內(nèi)容已經(jīng)存在,把鼠標(biāo)放到輸入框,不做任何修改再離開(kāi),則會(huì)提示錯(cuò)誤,很是郁悶2013-01-01
AspNet中使用JQuery上傳插件Uploadify詳解
Uploadify是JQuery的一個(gè)上傳插件,實(shí)現(xiàn)的效果非常不錯(cuò),帶進(jìn)度顯示。不過(guò)官方提供的實(shí)例時(shí)php版本的,本文將詳細(xì)介紹Uploadify在Aspnet中的使用2015-05-05
jquery Deferred 快速解決異步回調(diào)的問(wèn)題
下面小編就為大家?guī)?lái)一篇jquery Deferred 快速解決異步回調(diào)的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-04-04
jquery Mobile入門—多頁(yè)面切換示例學(xué)習(xí)
在JQuery Mobile中,多個(gè)頁(yè)面的切換是通過(guò)<a>元素、并將<href>屬性設(shè)置為#+對(duì)應(yīng)的id號(hào)的方式進(jìn)行的2013-01-01
基于jQuery實(shí)現(xiàn)瀑布流頁(yè)面
這篇文章主要為大家詳細(xì)介紹了基于jQuery實(shí)現(xiàn)瀑布流頁(yè)面的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
jQuery選擇器源碼解讀(七):elementMatcher函數(shù)
這篇文章主要介紹了jQuery選擇器源碼解讀(七):elementMatcher函數(shù),本文講解了源碼、功能、參數(shù)、返回函數(shù) 等內(nèi)容,需要的朋友可以參考下2015-03-03

