成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

怎么解析jQuery框架源碼

怎么解析jQuery框架源碼,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

在臨邑等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),營(yíng)銷型網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè),臨邑網(wǎng)站建設(shè)費(fèi)用合理。

對(duì)于jQuery只停留在應(yīng)用是可悲的,在做項(xiàng)目的過程,jquery源碼一度成為了自己開發(fā)的瓶頸,利用了近一天的時(shí)間對(duì)其宏觀上進(jìn)行了徹底的分析,收獲頗豐,分享于此。

在此說明,所研究的jQuery框架版本為1.7.2。

宏觀而言,jQuery框架可分為3個(gè)步驟——

1.定義jQuery變量
2.擴(kuò)充jQuery變量及jQuery.fn變量(利用jQuery及jQuery.fn命名空間進(jìn)行方法的填充)
3.將jQuery置于全局

其細(xì)節(jié)如下——

/**    * 1.定義jQuery變量    *  var jQuery = (function () {    *         *        //定義一個(gè)局部變量jQuery    *        var jQuery = function(selector, context) {    *            //這是所有jQuery選擇器的開始    *            return new jQuery.fn.init(selector, context, rootjQuery);    *        },    *            *        //接著定義其他變量,最主要的是對(duì)jQuery函數(shù)原型的改造    *         //兩者皆為指針,并指向同一起始位置,但后續(xù)對(duì)兩個(gè)對(duì)象的擴(kuò)充,使得兩者能夠指向的位置域有所不同    *        jQuery.fn = jQuery.prototype = {    *            constructor: jQuery,    *            init: function(){...},//定義了所有jQuery選擇器的開始    *            //還定義了其他的基礎(chǔ)方法,如    *            size: function(){...},    *            toArray: function(){...},    *            get: function(){...},    *            ......    *            port: [].sort,    *            splice: [].splice    *        };    *            *        //對(duì)上面定義的init函數(shù)重置原型    *        jQuery.fn.init.prototype = jQuery.fn;    *            *        //實(shí)現(xiàn)了jQuery原型的擴(kuò)充    *        jQuery.extend = jQuery.fn.extend = function() {    *            ......    *        }    *            *        //定義完jQuery命名空間下的extend方法,就可以直接擴(kuò)充jQuery原型了    *        jQuery.extend({    *            noConflict: function(deep){...},    *            //一系列方法...    *        })    *            *        //鑒別構(gòu)造器語句...    *        //鑒別瀏覽器語句...    *        //其他...    *            *        //要返回這個(gè)局部變量jQuery對(duì)象,賦值給外圍的jQuery變量    *        return jQuery;    *        *    )();    *     * 2.擴(kuò)充jQuery變量及jQuery.fn變量(利用jQuery及jQuery.fn命名空間進(jìn)行方法的填充)    *     核心的兩個(gè)方法——    *     jQuery.extend({...})    *     jQuery.fn.extend({...})    *     * 3.將jQuery置于全局    *     在代碼的***——    *     window.jQuery = window.$ = jQuery;    *     */

選取3個(gè)例子進(jìn)行深入研究——

(function ($) {              /**        * 測(cè)試-jquery選擇器方法(初始化)、測(cè)試-append方法,流程解析如下&mdash;&mdash;        * 1>$('#test', 'body')調(diào)用jQuery函數(shù)(var jQuery = function(selector, context) {return new jQuery.fn.init(selector, context, rootjQuery);})        *     先對(duì)選擇器selector(即#test),進(jìn)行初始化,即(jQuery.fn.init('#test', 'body', [#document]))        *     發(fā)現(xiàn)有context(即body),那么要對(duì)body進(jìn)行初始化,再調(diào)用$(context).find(selector)方法(即$('body').find('body'))        * 2>對(duì)于append方法:會(huì)調(diào)用jQuery.fn.domManip方法(這個(gè)方法會(huì)調(diào)用jQuery.buildFragment方法),最終會(huì)調(diào)用selector的dom元素的appendChild方法進(jìn)行dom操作        */      $('#test', 'body').append('<div class="c2">implant content<div>');                  /**        * 測(cè)試-擴(kuò)展jQuery對(duì)象本身,即,用來在jQuery命名空間上增加新函數(shù)        * 看了源碼就會(huì)發(fā)現(xiàn):        *     它循環(huán)了傳入的對(duì)象參數(shù)里面的key-value值,并對(duì)jQuery這個(gè)函數(shù)對(duì)象做了擴(kuò)展,其key值正是傳參的key值(min和max)        */      $.extend({           min: function(a, b) { return a < b ? a : b; },           max: function(a, b) { return a > b ? a : b; }       });       $.min(2,3); //2              /**        * 測(cè)試-擴(kuò)展 jQuery 元素集來提供新的方法(通常用來制作插件)。        * 看了源碼就會(huì)發(fā)現(xiàn):        *     它與jQuery.extend的調(diào)用方法是同一個(gè)方法,只不過它對(duì)jQuery.fn這個(gè)命名空間做了功能擴(kuò)展        */      $.fn.extend({           check: function() {               return this.each(function() {                    this.checked = true;                });           },           uncheck: function() {               return this.each(function() {                    this.checked = false;                });           }       });          /**    * 搜索jQuery變量,只要在這個(gè)代碼段之前引入jQuery.js框架即可,在這個(gè)框架中,會(huì)把jQuery變量放置到window對(duì)象中    * 源碼如下:    *         // Expose jQuery to the global object    *         window.jQuery = window.$ = jQuery;  //這句放在了框架中的***一句,    *                                             //這句之前,在框架中對(duì)jQuery這個(gè)局部對(duì)象變量(命名空間),做了方法及屬性的填充    */  })(jQuery);
/**   * 需要的前提知識(shí)&mdash;&mdash;   * 1.JS執(zhí)行順序   *         1>預(yù)解析   *         2>執(zhí)行   * 2.函數(shù)作用域   *         1>this(深入理解函數(shù)調(diào)用模式)   *         2>變量檢索(深入理解變量對(duì)象VO)   *         3>模塊模式(深入理解閉包)   * 3.函數(shù)原型繼承   */
/**   * 從源碼的架構(gòu)可以學(xué)到   * 1.對(duì)于重復(fù)利用的變量,提前重新賦值,置為局部變量,這樣就減少了變量查找的過程,提高了性能,如:   *     var document = window.document,    *       navigator = window.navigator,    *       location = window.location;   * 2.單變量置頂集中聲明   *     在每一個(gè)函數(shù)執(zhí)行域中,把所有該函數(shù)所需要的變量在這個(gè)函數(shù)域的最頂端進(jìn)行聲明,利于變量管理,提高性能,利于維護(hù)   * 3.絕大部分函數(shù)定義用的是函數(shù)表達(dá)式的方式,而非函數(shù)聲明的方式,這種方式利于代碼維護(hù),值得借鑒   * 4.代碼組織方式   *     1>整體而言,深度利用命名空間的方式管理自己的代碼,極大的提高的代碼的維護(hù)性,值得借鑒   *     2>利用模塊模式,充分劃分哪些變量及函數(shù)是私有的。利用命名空間的方式,充分劃分哪些變量及函數(shù)是公有的。   *     3>功能模塊化:并沒有一次性將所需要的功能函數(shù)擴(kuò)充于jQuery或jQuery.fn命名空間中,而是充分利用模塊化思想進(jìn)行劃分。   *     4>源碼中的每一個(gè)函數(shù)都是以key-value(這里的value是函數(shù))的形式置于某個(gè)命名空間中,而不是簡(jiǎn)單的功能function的平鋪。   *         增加了代碼的維護(hù)性,值得借鑒。   */
/**   * 研究jquery框架的作用:   * 1.在做基于jquery框架的項(xiàng)目時(shí),可依據(jù)所需性能合理使用里面的方法,   *     例如,能完成同樣一項(xiàng)功能的兩個(gè)方法,我們當(dāng)然要選擇性能高的一個(gè)方法   * 2.理解了整體架構(gòu),對(duì)于細(xì)節(jié)方法的具體實(shí)現(xiàn),可根據(jù)應(yīng)用具體分析   * 3.對(duì)于以后研究基于jquery的框架(如jquery.validate.js或jquery.ptTimeSelect.js)就不再成為難點(diǎn)   * 4.記住jquery框架的編碼風(fēng)格,利于對(duì)比其他優(yōu)秀框架,吸取其精華   */

關(guān)于怎么解析jQuery框架源碼問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

文章名稱:怎么解析jQuery框架源碼
本文鏈接:http://jinyejixie.com/article10/poscgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)站維護(hù)云服務(wù)器、網(wǎng)站設(shè)計(jì)企業(yè)建站、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
临泉县| 云阳县| 长宁县| 珲春市| 仪征市| 丹棱县| 晴隆县| 常宁市| 邓州市| 白城市| 姚安县| 许昌县| 长春市| 永平县| 黎川县| 绥滨县| 丘北县| 阿拉善盟| 锦屏县| 诸城市| 顺平县| 博罗县| 武功县| 清水河县| 蓬安县| 霍州市| 宝应县| 平南县| 囊谦县| 渭源县| 汉阴县| 富宁县| 丽江市| 隆昌县| 商丘市| 青田县| 乌拉特中旗| 新河县| 晋中市| 仁怀市| 广丰县|