读之前的预备工作:

1.基础的js知识,以及html和css知识,和正则表达式知识。可以参考妙味课堂的基础js,html和css大纲。

2.JavaScript核心指南的知识http://www.cnblogs.com/cnwebdeveloper/archive/2012/03/28/2421461.html

3.JavaScript设计模式的知识http://www.oschina.net/translate/learning-javascript-design-patterns?lang=chs

4.使用过jQuery

有了预备工作,阅读源码你会比较顺利。

我阅读的是2.0.3无法压缩版本,源代码有注释。

代码先从整体开始阅读,

1.搞清楚的就是它的封装方式和继承方式,

var $ =jQuery = function(){
return new jQuery.fn.init();
}
jQuery.fn = jQuery.prototype = {
init : function(){
this.length = 0;
this.test = function(){
return this.length;
}
return this;
},
jquery: "2.0.3",
length: 1,
size: function() {
return this.length;
}
}
jQuery.fn.init.prototype = jQuery.fn; //使用jQuery的原型对象覆盖init的原型对象
alert( $().jquery ); //返回"2.0.3"
alert( $().test() ); //返回0
alert( $().size() ); //返回0

jQuery有其自身的静态方法和动态添加方法。所谓静态方法,就是jQuery各个模块都会调用到的公共方法。所谓动态添加方法,就是通过jQuery自己实现的extend函数来扩展的方法,这些方法一般jQuery内部不会使用到。

2.列出它的各个模块

Sizzle选择器,DOM操作,事件操作,样式操作,ajax操作,元素运动操作,回调函数队列操作(一次性调用多个函数,或设定某个函数只能调用一次),延迟函数操作(原先ajax回调函数形式是树状,现在是线状$.ajax("test.html").done(function(){ alert("哈哈,成功了!"); }).fail(function(){ alert("出错啦!"); });),数据缓存操作

3.一行一行阅读源代码

实际阅读过程中,你会遇到的困难大都是,

  1. 这个正则表达式什么意思
  2. 这么多if else嵌套究竟想表达什么个意思,而且为什么这么写
  3. js语言特有的语法所表达的意思,比如双感叹号!!在js里的作用,对null与undefined用!操作符时都会产生true的结果,所以用两个感叹号的作用就在于,如果明确设置了(非null/undefined/0""/等值),自然一样的值;如果没有设置,test就会默认为false,而不是null或undefined或0。还有>>>和~这些操作符,在js里都是特殊用法。

针对这些困难,你能做的就是

  1. 看注释
  2. 自己写个小Demo,设源码断点,一步步调试来观察代码流程。(对于源码里的各种情况判断,这里要考验你的Demo完整性,间接考研你的思维缜密性)
  3. 看第三方人怎么解读源代码,比如http://www.cnblogs.com/aaronjs/p/3279314.html

最后,发现,读这个源代码,不需要你知道什么算法知识,甚至数据结构也可以不知道,设计模式其实也可以不去知道。

耐下心来,静下心来,有着一般的逻辑,就能看懂jQuery源码。

平凡的逻辑,也能读懂不平凡的jQuery库。

读jQuery源码有感的更多相关文章

  1. 读jQuery源码有感2

    那么就来读读jQuery源码的Callbacks部分. 一上来看原版源码 jQuery.Callbacks = function( options ) { // Convert options fro ...

  2. 读jQuery源码有感3

    这次的主题是,具体的库和抽象的思路. 当看到Deferred这个区块时,觉得jQuery代码设计挺复杂,得用许多脑力才能看明白. 可是把这个峰回路转十八回的代码看懂又如何,是为了使用过程中出现bug后 ...

  3. 【读jQuery源码有感系列一】callee

    <script type="text/javascript"> /*调用自身*/ function calleeDemo() { try{ } catch (error ...

  4. 读jQuery源码 - Deferred

    Deferred首次出现在jQuery 1.5中,在jQuery 1.8之后被改写,它的出现抹平了javascript中的大量回调产生的金字塔,提供了异步编程的能力,它主要服役于jQuery.ajax ...

  5. 读jQuery源码之整体框架分析

    读一个开源框架,大家最想学到的就是设计的思想和实现的技巧.最近读jQuery源码,记下我对大师作品的理解和心得,跟大家分享,权当抛砖引玉. 先附上jQuery的代码结构. (function(){ / ...

  6. 【读fastclick源码有感】彻底解决tap“点透”,提升移动端点击响应速度

    申明!!!最后发现判断有误,各位读读就好,正在研究中.....尼玛水太深了 前言 近期使用tap事件为老夫带来了这样那样的问题,其中一个问题是解决了点透还需要将原来一个个click变为tap,这样的话 ...

  7. 读jQuery源码 - Callbacks

    代码的本质突出顺序.有序这一概念,尤其在javascript——毕竟javascript是单线程引擎. javascript拥有函数式编程的特性,而又因为javascript单线程引擎,我们的函数总是 ...

  8. 读jQuery源码释疑笔记2

    本释疑笔记是针对自己在看源码的过程中遇到的一些问题的解答,对大众可能不具有参考性,不过可以看看有没有你也不懂得地方,相互学习,相互进步. 1.函数init <div id="one&q ...

  9. 读jQuery源码释疑笔记

    本释疑笔记是针对自己在看源码的过程中遇到的一些问题的解答,对大众可能不具有参考性,不过可以看看有没有你也不懂得地方,相互学习,相互进步.  1.each的用法 之前对each的用法一直迷迷糊糊,这次终 ...

随机推荐

  1. java maven项目找不到jconsole-1.8.0.jar和tools-1.8.0.jar包

    今天在整合jar包时候,出现了 这是我导入的jar坐标 <dependency> <groupId>com.alibaba</groupId> <artifa ...

  2. spring用注解简化bean配置

    组件扫描: <context:component-scan base-package="com"/> 容器启动后如果发现配置文件有上面的标签会自动扫描对应的包及子包,如 ...

  3. Keepalived+HAproxy实现高可用负载均衡

    总概:       Keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived的作用是检测web服务器的状态, ...

  4. 部署 Flask 应用时,为什么会需要 gunicorn 或 uWSGI?

    Flask自带的wsgi性能低下 只适合你开发调试的时候用, 线上你必须用Gunicorn+Nginx才能获得更强的性能,和更高的安全性

  5. sklearn_SVM

    一.用SVM实现二分类: 支持向量机分类器,是在数据空间中找出一个超平面作为决策边界,利用这个决策边界来对数据进行分类,并使分类误差尽量小的模型                             ...

  6. zw版【转发·台湾nvp系列Delphi例程】HALCON SigmaImage2

    zw版[转发·台湾nvp系列Delphi例程]HALCON SigmaImage2 procedure TForm1.Button1Click(Sender: TObject);var op: HOp ...

  7. 岭回归(Ridge Regression)

    一.一般线性回归遇到的问题 在处理复杂的数据的回归问题时,普通的线性回归会遇到一些问题,主要表现在: 预测精度:这里要处理好这样一对为题,即样本的数量和特征的数量 时,最小二乘回归会有较小的方差 时, ...

  8. libsvm java版本使用心得(转)

    http://blog.csdn.net/u010340854/article/details/19159883 https://github.com/cjlin1/libsvm 项目中要用到svm分 ...

  9. 【Redis学习之十】Redis集群维护

    Redis集群增删节点部署环境 redis-3.0.0 VM虚拟机redhat6.5-x64:192.168.1.201.192.168.1.202.192.168.1.203.            ...

  10. C++矩阵库 Eigen 快速入门

    最近需要用 C++ 做一些数值计算,之前一直采用Matlab 混合编程的方式处理矩阵运算,非常麻烦,直到发现了 Eigen 库,简直相见恨晚,好用哭了. Eigen 是一个基于C++模板的线性代数库, ...