亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么解析jQuery框架源碼

發布時間:2021-11-15 22:30:54 來源:億速云 閱讀:117 作者:柒染 欄目:web開發

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

對于jQuery只停留在應用是可悲的,在做項目的過程,jquery源碼一度成為了自己開發的瓶頸,利用了近一天的時間對其宏觀上進行了徹底的分析,收獲頗豐,分享于此。

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

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

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

其細節如下——

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

選取3個例子進行深入研究——

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

關于怎么解析jQuery框架源碼問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

方山县| 西乡县| 保康县| 安新县| 淮安市| 克拉玛依市| 哈密市| 河南省| 芮城县| 湘潭县| 涞源县| 上栗县| 滦南县| 沙洋县| 高要市| 丹江口市| 阿坝| 民丰县| 彩票| 弥勒县| 新丰县| 衡东县| 东台市| 磐石市| 潞西市| 新邵县| 铁力市| 凯里市| 图们市| 城市| 建宁县| 历史| 鱼台县| 张家口市| 四会市| 玉门市| 虎林市| 梁河县| 容城县| 静乐县| 和龙市|