欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

jQuery內(nèi)部原理和實(shí)現(xiàn)方式淺析

 更新時(shí)間:2015年02月03日 09:40:53   作者:Hito''s Blog  
這篇文章主要介紹了jQuery內(nèi)部原理和實(shí)現(xiàn)方式淺析,本文試圖從整體來闡述一下jQuery的內(nèi)部實(shí)現(xiàn),需要的朋友可以參考下

這段時(shí)間在學(xué)習(xí)研究jQuery源碼,受益于jQuery日益發(fā)展強(qiáng)大,研究jQuery的大牛越來越多,學(xué)習(xí)的資料也比前兩年好找了,有很多非常不錯(cuò)的資源,如高云的jQuery1.6.1源碼分析系列。這些教程非常細(xì)致的分析了jQuery內(nèi)部原理和實(shí)現(xiàn)方式,對(duì)學(xué)習(xí)和理解jQuery有非常大的幫助。但是個(gè)人認(rèn)為很多教程對(duì)jQuery的整體結(jié)果把握不足,本人試圖從整體來闡述一下jQuery的內(nèi)部實(shí)現(xiàn)。

大家知道,調(diào)用jQuery有兩種方式,一種是高級(jí)的實(shí)現(xiàn),通過傳遞一個(gè)參數(shù)實(shí)現(xiàn)DOM選擇,如通過$(“h1″)選擇所有的h1元素,第二種是較為低級(jí)的實(shí)現(xiàn),如果通過$.ajax實(shí)現(xiàn)ajax的操作。那么,這兩種方式到底有何不同?用typeof函數(shù)檢測(cè)$(‘h1′)和$.ajax,類型分別為object和function,稍微學(xué)過jQuery的都知道或者聽過過,前者返回的是一個(gè)jQuery對(duì)象,那么jQuery對(duì)象是什么,它和jQuery是什么關(guān)系呢?我們先來通過for(var i in $(”)) document.write(i+” :::”+$(“”)[i]+””);打印一下jQuery對(duì)象的屬性和對(duì)應(yīng)的值,可以看到它有100多個(gè)屬性,通過console輸入$(“*”)可以看到大部分屬性是繼承自jQuery原型的屬性,jQuery對(duì)象實(shí)際上是這樣一個(gè)對(duì)象:

所以我們來推測(cè),jQuery的實(shí)現(xiàn)可能是類似這樣的:

function jQuery(){
 this[0]="Some DOM Element";
 this[1]="Some DOM Element";
 this[2]="Some DOM Element";
 this.length=3;
 this.prevObject="Some Object";
 this.context="Some Object";
 this.selector="Some selector";
}
jQuery.prototype={
get:function(){},
each:function(){},
......
}

這些代碼通過new操作符就就能創(chuàng)建出擁有上述屬性的jQuery對(duì)象,但是實(shí)際上我們調(diào)用jQuery創(chuàng)建jQuery對(duì)象時(shí)并沒有使用new操作符,這是如何實(shí)現(xiàn)的呢?來看jQuery的實(shí)現(xiàn):

var jQuery = function( selector, context ) {
 // The jQuery object is actually just the init constructor 'enhanced'
 return new jQuery.fn.init( selector, context, rootjQuery );
}
jQuery.fn=jQuery.prototype={
 jquery: core_version,
 init:function(selector,context){
 //some code
 return this;
 }
 //some code there
 //......
}
jQuery.fn.init.prototype=jQuery.fn;

這里有幾點(diǎn)做得非常巧妙的地方,第一點(diǎn)是通過jQuery原型屬性的init方法來創(chuàng)建對(duì)象來達(dá)到不用new創(chuàng)建對(duì)象的目的,第二點(diǎn)是對(duì)init方法內(nèi)this指向的處理。我們知道,通過調(diào)用init返回一個(gè)jQuery的實(shí)例,那么這個(gè)實(shí)例就必須要繼承jQuery.prototype的屬性,那么init里面這個(gè)this, 就繼承jQuery.prototype的屬性。但是init里面的this,受制于作用域的限制,并不能訪問jQuery.prototype其它的屬性,jQuery通過一句'jQuery.fn.init.prototype=jQuery.fn'把它的原型指向jQuery.fn,這樣以來,init產(chǎn)生的jQuery對(duì)象就擁有了jQuery.fn的屬性。

到這里,一個(gè)jQuery的基本原型就浮出水面了。這里有兩個(gè)對(duì)象,一個(gè)是jQuery這個(gè)構(gòu)造函數(shù),另外一個(gè)是這個(gè)構(gòu)造函數(shù)產(chǎn)生的對(duì)象(我們稱之為jQuery對(duì)象,它和普通對(duì)象沒有什么區(qū)別), 如下關(guān)系圖:

可以看到j(luò)Query構(gòu)造函數(shù)和jQuery.prototype均有各自的屬性和方法,兩者的調(diào)用方法各不一樣,這兩個(gè)對(duì)象都有一個(gè)extend方法,都是用來擴(kuò)展自身的屬性和方法,在jQuery內(nèi)部,extend的實(shí)現(xiàn)實(shí)際是靠一樣的代碼, 將在后面的源碼分析中做以詳細(xì)的分析。

相關(guān)文章

  • 從零開始學(xué)習(xí)jQuery (九) jQuery工具函數(shù)

    從零開始學(xué)習(xí)jQuery (九) jQuery工具函數(shù)

    我們經(jīng)常要使用腳本處理各種業(yè)務(wù)邏輯, 最常見的就是數(shù)組和對(duì)象的操作. jQuery工具函數(shù)為我們操作對(duì)象和數(shù)組提供了便利條件.
    2011-02-02
  • jQuery 選擇符詳細(xì)介紹及整理

    jQuery 選擇符詳細(xì)介紹及整理

    這篇文章主要介紹了jQuery 選擇符詳細(xì)介紹及整理的相關(guān)資料,這里整理了選擇符的一些資料,幫助到家學(xué)習(xí)這部分內(nèi)容,需要的朋友可以參考下
    2016-12-12
  • Jquery實(shí)現(xiàn)異步上傳文件

    Jquery實(shí)現(xiàn)異步上傳文件

    這篇文章主要為大家詳細(xì)介紹了Jquery實(shí)現(xiàn)異步上傳文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • jquery輸入數(shù)字隨機(jī)抽獎(jiǎng)特效的簡(jiǎn)單實(shí)現(xiàn)代碼

    jquery輸入數(shù)字隨機(jī)抽獎(jiǎng)特效的簡(jiǎn)單實(shí)現(xiàn)代碼

    下面小編就為大家?guī)硪黄猨query輸入數(shù)字隨機(jī)抽獎(jiǎng)特效的簡(jiǎn)單實(shí)現(xiàn)代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • JQuery實(shí)現(xiàn)超鏈接鼠標(biāo)提示效果的方法

    JQuery實(shí)現(xiàn)超鏈接鼠標(biāo)提示效果的方法

    這篇文章主要介紹了JQuery實(shí)現(xiàn)超鏈接鼠標(biāo)提示效果的方法,涉及jQuery針對(duì)鼠標(biāo)事件及頁面元素樣式操作的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 一篇文章帶你入門和了解Jquery的基礎(chǔ)操作

    一篇文章帶你入門和了解Jquery的基礎(chǔ)操作

    這篇文章主要講述了一個(gè)JQuery入門基礎(chǔ),實(shí)現(xiàn)的過程效果都很簡(jiǎn)單,特別適合初學(xué)者來學(xué)習(xí),感興趣的小伙伴們可以參考一下
    2021-11-11
  • jQuery中after()方法用法實(shí)例

    jQuery中after()方法用法實(shí)例

    這篇文章主要介紹了jQuery中after()方法用法,以實(shí)例形式較為詳細(xì)的分析了after()方法的功能、特性與使用技巧,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • jQuery UI Dialog控件中的表單無法正常提交的解決方法

    jQuery UI Dialog控件中的表單無法正常提交的解決方法

    研究了頁面源碼后發(fā)現(xiàn),jQuery UI Dialog控件初始化時(shí)動(dòng)態(tài)生成的HTML元素被添加到頁面的尾部、form元素的后面,而原始的Dialog模板部分(其內(nèi)包含表單元素)也被移到了 動(dòng)態(tài)生成的HTML元素內(nèi)。
    2010-12-12
  • 使用jQuery實(shí)現(xiàn)Web頁面換膚功能的要點(diǎn)解析

    使用jQuery實(shí)現(xiàn)Web頁面換膚功能的要點(diǎn)解析

    網(wǎng)頁換膚的實(shí)質(zhì)就是切換CSS樣式,關(guān)鍵是給用戶做出點(diǎn)擊切換的功能以及換膚完成之后的緩存記錄功能,下面我們就來看一下使用jQuery實(shí)現(xiàn)Web頁面換膚功能的要點(diǎn)解析:
    2016-05-05
  • jquery多級(jí)樹形下拉菜單的實(shí)例代碼

    jquery多級(jí)樹形下拉菜單的實(shí)例代碼

    這篇文章主要介紹了jquery多級(jí)樹形下拉菜單的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-07-07

最新評(píng)論