宏观解析jQuery框架源码

宏观解析jQuery框架源码

来源: 中国IT实验室 作者: 佚名 发表于: 2012-11-07 14:41  点击:
对于jQuery只停留在应用是可悲的,在做项目的过程,jquery源码一度成为了自己开发的瓶颈,利用了近一天的时间对其宏观上进行了彻底的分析,收获颇丰,分享于此 在此说明,所研究的jQuery框架版本为1.7.2。 宏观而言,jQuery框架可分为3个步骤 1.定义jQuery变
对于jQuery只停留在应用是可悲的,在做项目的过程,jquery源码一度成为了自己开发的瓶颈,利用了近一天的时间对其宏观上进行了彻底的分析,收获颇丰,分享于此——
在此说明,所研究的jQuery框架版本为1.7.2。
宏观而言,jQuery框架可分为3个步骤——

1.定义jQuery变量
2.扩充jQuery变量及jQuery.fn变量(利用jQuery及jQuery.fn命名空间进行方法的填充)
3.将jQuery置于全局
其细节如下——
  1. /**  
  2.   * 1.定义jQuery变量  
  3.   *  var jQuery = (function () {  
  4.   *       
  5.   *        //定义一个局部变量jQuery  
  6.   *        var jQuery = function(selector, context) {  
  7.   *            //这是所有jQuery选择器的开始  
  8.   *            return new jQuery.fn.init(selector, context, rootjQuery);  
  9.   *        },  
  10.   *          
  11.   *        //接着定义其他变量,最主要的是对jQuery函数原型的改造  
  12.   *         //两者皆为指针,并指向同一起始位置,但后续对两个对象的扩充,使得两者能够指向的位置域有所不同  
  13.   *        jQuery.fn = jQuery.prototype = {  
  14.   *            constructor: jQuery,  
  15.   *            init: function(){...},//定义了所有jQuery选择器的开始  
  16.   *            //还定义了其他的基础方法,如  
  17.   *            size: function(){...},  
  18.   *            toArray: function(){...},  
  19.   *            get: function(){...},  
  20.   *            ......  
  21.   *            port: [].sort,  
  22.   *            splice: [].splice  
  23.   *        };  
  24.   *          
  25.   *        //对上面定义的init函数重置原型  
  26.   *        jQuery.fn.init.prototype = jQuery.fn;  
  27.   *          
  28.   *        //实现了jQuery原型的扩充  
  29.   *        jQuery.extend = jQuery.fn.extend = function() {  
  30.   *            ......  
  31.   *        }  
  32.   *          
  33.   *        //定义完jQuery命名空间下的extend方法,就可以直接扩充jQuery原型了  
  34.   *        jQuery.extend({  
  35.   *            noConflict: function(deep){...},  
  36.   *            //一系列方法...  
  37.   *        })  
  38.   *          
  39.   *        //鉴别构造器语句...  
  40.   *        //鉴别浏览器语句...  
  41.   *        //其他...  
  42.   *          
  43.   *        //要返回这个局部变量jQuery对象,赋值给外围的jQuery变量  
  44.   *        return jQuery;  
  45.   *      
  46.   *    )();  
  47.   *   
  48.   * 2.扩充jQuery变量及jQuery.fn变量(利用jQuery及jQuery.fn命名空间进行方法的填充)  
  49.   *     核心的两个方法——  
  50.   *     jQuery.extend({...})  
  51.   *     jQuery.fn.extend({...})  
  52.   *   
  53.   * 3.将jQuery置于全局  
  54.   *     在代码的最后——  
  55.   *     window.jQuery = window.$ = jQuery;  
  56.   *   
  57.   */ 
选取3个例子进行深入研究——
  1. (function ($) {  
  2.        
  3.      /**  
  4.       * 测试-jquery选择器方法(初始化)、测试-append方法,流程解析如下——  
  5.       * 1>$('#test', 'body')调用jQuery函数(var jQuery = function(selector, context) {return new jQuery.fn.init(selector, context, rootjQuery);})  
  6.       *     先对选择器selector(即#test),进行初始化,即(jQuery.fn.init('#test', 'body', [#document]))  
  7.       *     发现有context(即body),那么要对body进行初始化,再调用$(context).find(selector)方法(即$('body').find('body'))  
  8.       * 2>对于append方法:会调用jQuery.fn.domManip方法(这个方法会调用jQuery.buildFragment方法),最终会调用selector的dom元素的appendChild方法进行dom操作  
  9.       */ 
  10.      $('#test', 'body').append('<div class="c2">implant content<div>');      
  11.        
  12.      /**  
  13.       * 测试-扩展jQuery对象本身,即,用来在jQuery命名空间上增加新函数  
  14.       * 看了源码就会发现:  
  15.       *     它循环了传入的对象参数里面的key-value值,并对jQuery这个函数对象做了扩展,其key值正是传参的key值(min和max)  
  16.       */ 
  17.      $.extend({  
  18.          min: function(a, b) { return a < b ? a : b; },  
  19.          max: function(a, b) { return a > b ? a : b; }  
  20.      });  
  21.      $.min(2,3); //2  
  22.        
  23.      /**  
  24.       * 测试-扩展 jQuery 元素集来提供新的方法(通常用来制作插件)。  
  25.       * 看了源码就会发现:  
  26.       *     它与jQuery.extend的调用方法是同一个方法,只不过它对jQuery.fn这个命名空间做了功能扩展  
  27.       */ 
  28.      $.fn.extend({  
  29.          check: function() {  
  30.              return this.each(function() {   
  31.                  this.checked = true;   
  32.              });  
  33.          },  
  34.          uncheck: function() {  
  35.              return this.each(function() {   
  36.                  this.checked = false;   
  37.              });  
  38.          }  
  39.      });  
  40.        
  41.  /**  
  42.   * 搜索jQuery变量,只要在这个代码段之前引入jQuery.js框架即可,在这个框架中,会把jQuery变量放置到window对象中  
  43.   * 源码如下:  
  44.   *         // Expose jQuery to the global object  
  45.   *         window.jQuery = window.$ = jQuery;  //这句放在了框架中的最后一句,  
  46.   *                                             //这句之前,在框架中对jQuery这个局部对象变量(命名空间),做了方法及属性的填充  
  47.   */ 
  48.  })(jQuery); 
  1. /**  
  2.  * 需要的前提知识——  
  3.  * 1.JS执行顺序  
  4.  *         1>预解析  
  5.  *         2>执行  
  6.  * 2.函数作用域  
  7.  *         1>this(深入理解函数调用模式)  
  8.  *         2>变量检索(深入理解变量对象VO)  
  9.  *         3>模块模式(深入理解闭包)  
  10.  * 3.函数原型继承  
  11.  */ 
  1. /**  
  2.  * 从源码的架构可以学到  
  3.  * 1.对于重复利用的变量,提前重新赋值,置为局部变量,这样就减少了变量查找的过程,提高了性能,如:  
  4.  *     var document = window.document,   
  5.  *       navigator = window.navigator,   
  6.  *       location = window.location;  
  7.  * 2.单变量置顶集中声明  
  8.  *     在每一个函数执行域中,把所有该函数所需要的变量在这个函数域的最顶端进行声明,利于变量管理,提高性能,利于维护  
  9.  * 3.绝大部分函数定义用的是函数表达式的方式,而非函数声明的方式,这种方式利于代码维护,值得借鉴  
  10.  * 4.代码组织方式  
  11.  *     1>整体而言,深度利用命名空间的方式管理自己的代码,极大的提高的代码的维护性,值得借鉴  
  12.  *     2>利用模块模式,充分划分哪些变量及函数是私有的。利用命名空间的方式,充分划分哪些变量及函数是公有的。  
  13.  *     3>功能模块化:并没有一次性将所需要的功能函数扩充于jQuery或jQuery.fn命名空间中,而是充分利用模块化思想进行划分。  
  14.  *     4>源码中的每一个函数都是以key-value(这里的value是函数)的形式置于某个命名空间中,而不是简单的功能function的平铺。  
  15.  *         增加了代码的维护性,值得借鉴。  
  16.  */ 
  1. /**  
  2.  * 研究jquery框架的作用:  
  3.  * 1.在做基于jquery框架的项目时,可依据所需性能合理使用里面的方法,  
  4.  *     例如,能完成同样一项功能的两个方法,我们当然要选择性能高的一个方法  
  5.  * 2.理解了整体架构,对于细节方法的具体实现,可根据应用具体分析  
  6.  * 3.对于以后研究基于jquery的框架(如jquery.validate.js或jquery.ptTimeSelect.js)就不再成为难点  
  7.  * 4.记住jquery框架的编码风格,利于对比其他优秀框架,吸取其精华 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值