首页 > Web开发 > 详细

jquery源码拜读开篇(一)

时间:2015-11-12 01:11:07      阅读:300      评论:0      收藏:0      [点我收藏+]

拜读一个开源框架,最想学到的就是设计的思想和实现的技巧。

  

      刚开始是前端开发中使用jquery,比较多,现在转到移动端开发使用zepto。zepto主要用在移动设备上,只支持较新的浏览器,好处是代码量比较小,性能也较好。jquery主要是兼容性好,可以跑在各种pc,移动上,好处是兼容各种浏览器,扩展插件库相当丰富,缺点是代码量大,同时考虑兼容,性能也不够好。虽然zepto的API就是完全兼容 jQuery 的,功能上 Zepto 是 jQuery 的子集,定位上 jQuery 桌面为主,zepto 则从一开始就定位移动设备,发现有些方法使用使用还是有很大区别,其中区别待分析之后慢慢道来。

      JavaScript宗旨就是Write Less, Do More。作为开发人员在使用jQuery时,由于仅仅只知道jQuery文档中的使用方法,不明白jQuery的运行原理,时常会碰到许多的问题。这些问题大部分是使用不当而产生,极少数是jQuery的Bug。如果不明白其运行机理和核心源码,我们也很难写出基于jQuery类库的高性能的程序出来。

jQuery的源码有些晦涩难懂,本文分享一些我看源码的方法,每一个模块我尽量按照这样的顺序去学习:

 1. 读官方文档,官方有非常详细的文档说明

2. 读源码,加注释,把自己思考的过程和结果记录下来

3. 大量阅读相关的网文和书籍,比如相同主题的分析文档,网上常问的问题等

不管怎么说写一篇源码分析,记录自己的心得,加深理解,对我们来说好处不言而语。

好吧,废话不多说,开始解读(基于 jQuery 1.11 版本)。有分析或者语言表达不到位之处请指正(文笔一般)^^。 

 

分析源码:首先要看懂这个(自调用匿名函数)

(function( window, undefined ) {
})(window);

通过定义这样一个匿名函数,创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命名空间。如果将匿名函数返回值(函数)赋予func,并且返回值调用匿名函数作用域上的变量,该局部变量在函数这行完之后空间不会被释放。

var func = (function( window, undefined ) {
    var  i = 0        
    return  function(){
             console.log(i++);        
    }
})(window);

多次运行func(),你会发现i实现了自加功能。

这样确保jQuery创建的变量不能和导入他的程序所使用的变量发生冲突,这也是jquery兼容性强大原因之一。

接下来看看自调用匿名函数中都实现了什么功能,按照代码顺序做下排列:

(function( window, undefined ) {
    
var jQuery = function( selector, context ) {//构建jquery对象
        return new jQuery.fn.init( selector, context, rootjQuery );
    }
// 工具函数 Utilities
// 异步队列 Deferred
// 浏览器测试 Support
// 数据缓存 Data
// 队列 queue
// 属性操作 Attribute
// 事件处理 Event
// 选择器 Sizzle
// DOM遍历
// DOM操作
// CSS操作
// 异步请求 Ajax
// 动画 FX
// 坐标和大小
    window.jQuery = window.$ = jQuery;
})(window);

有了这个结构框架,就能看懂jquery能做什么,接下来再来分析它是如何一步步实现相关模块的功能的。

 

jquery源码拜读开篇(一)

原文:http://www.cnblogs.com/hoboStage/p/4945954.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!