注意:本次源码分析选择2.0.3(因为不支持IE6、7、8,就少了很多兼容的hack的写法,对了解jQuery的实现原理有很大的帮助)

1.jQuery有不同的版本,从2.x版本便不再支持IE6、7、8

将jQuery拆分长框架一点一点进行了解

2.

(function ())();

这个叫匿名函数自执行

3.匿名函数自执行的好处是什么呢?

匿名函数自执行里面的所有东西都是一个局部的。防止和其他的代码冲突。

栗子①

(function () {
   var a=10;
})();
alert(a);

控制台报错,说a is not defined。

4.如何能够访问到匿名函数自执行中的方法呢?

很多种方法(⊙o⊙)哦。可以把你要对外提供的接口作为window的属性或者是方法。

栗子②

(function () {
var a=10; function abc(){
alert(a);
}
//将abc方法作为window的方法,就可以在匿名函数自执行外面进行访问了
window.abc=abc;
})();
abc();

但是要对外提供接口,我们才能找到使用的方法和属性

5.在jQuery中,$()是jQuery()的简写方式。

6.在jQuery文件中第21行到第94行就是定义了一些变量和函数。

其中,60-64行是一个特别重要的函数,就是平时用的$() jQuery()对外的接口

// Define a local copy of jQuery
jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context, rootjQuery );
},

但是现在这个jQuery还是以局部变量的形式存在,要提供对外的接口,才能使用。提供接口在第8823-8827行

// If there is a window object, that at least has a document property,
// define jQuery and $ identifiers
if ( typeof window === "object" && typeof window.document === "object" ) {
window.jQuery = window.$ = jQuery;
}

7.在第96-283行,都是给jQuery对象添加一些方法和属性。

prototype(原型)是面向对象的东西,所以说,jQuery就是一个基于面向对象的程序,jQuery里面写的都是跟面向对象有关的。

//96行
jQuery.fn = jQuery.prototype

8.为什么jQuery是一个基于面向对象的程序??

栗子③

//jQuery是这样调用方法的对吧。是不是和下面数组使用方法的方式非常像。
//但是实际上$("div")他本身是一个函数调用,但是函数调用的执行结果是一个对象,所以,这就是为什么说jQuery是基于面向对象的程序喽~~~
$("div").css();
$("div").text();

//这是Array对象方法的使用方式,先实例化一个对象,然后使用对象调用方法。
var arr=new Array(3);
arr.sort();
arr.splice();
//61--64
jQuery = function( selector, context ) {
//在这个函数执行完了就是一个new构造函数的过程,返回的就是一个jQuery对象~~既然返回的是对象,当然可以调用方法喽~~
return new jQuery.fn.init( selector, context, rootjQuery );
}

9.285--347行-->  extend:是jQuery当中的一个继承方法,希望后续添加的方法都能挂在jQuery对象上,很方便扩展

10.

//通过使用对象调用的方法,是实例方法。
$().text();
$().html(); //$是一个函数,在函数下面来扩展方法的话,就是扩展一些静态方法
//在jQuery当中,给面向对象扩展静态属性和静态方法叫做扩展工具方法
//工具方法和实例方法区别就在于,它既可以给jQuery对象来用,也可以给源生的JS来用,实例方法只能给jQuery对象调用
$.trim();
$.proxy();

11.静态方法和实例方法在jQuery中的关系?

可以把静态方法看作是在jQuery中的最底层,而实例方法是上一层或者是更高层的。

很多方法都是实例方法,里面调用的都是工具方法。

12.877行--2856行  Sizzle 复杂选择器的实现

13.2880行--3042行  Callbacks 回调对象 : 函数的统一管理

逐行分析jQuery源码的更多相关文章

  1. 分析jQuery源码时记录的一点感悟

    分析jQuery源码时记录的一点感悟      1.  链式写法      这是jQuery语法上的最大特色,也许该改改POJO里的set方法,和其他的非get方法什么的,可以把多行代码合并,减去每次 ...

  2. 读艾伦的jQuery的无new构建,疑惑分析——jquery源码学习一

    背景: 有心学习jquery源码,苦于自己水平有限,若自己研究,耗时耗力,且读懂之日无期. 所以,网上寻找高手的源码分析.再经过自己思考,整理,验证.以求有所收获. 此篇为读高手艾伦<jQuer ...

  3. jQuery源码解析资源便签

    最近开始解读jQuery源码,下面的链接都是搜过来的,当然妙味课堂 有相关的一系列视频,长达100多期,就像一只蜗牛慢慢爬, 至少品读三个框架,以后可以打打怪,自己造造轮子. 完全理解jQuery源代 ...

  4. jQuery源码分析学习--资料收集--更新中

    1.逐行分析jQuery源码的奥秘 - 网易云课堂  http://study.163.com/course/courseMain.htm?courseId=465001#/courseDetail? ...

  5. [转] jQuery源码分析-如何做jQuery源码分析

    jQuery源码分析系列(持续更新) jQuery的源码有些晦涩难懂,本文分享一些我看源码的方法,每一个模块我基本按照这样的顺序去学习. 当我读到难度的书或者源码时,会和<如何阅读一本书> ...

  6. jquery 源码分析

    想给自己一个任务,接下来要分析jquery源码,然后按照jquery的思想打造一个适合webkit的类jquery微框架,一切从模仿起!

  7. jquery源码分析之一前言篇

    1.问:jquery源码分析的版本是什么? 答:v3.2.1 2.问:为什么要分析jquery源码? 答:javascript是一切js框架的基础,jquery.es6.vue.angular.rea ...

  8. jQuery源码分析之整体框架

    之前只是知道jQuery怎么使用,但是我觉得有必要认真的阅读一下这个库,在分析jQuery源码之前,很有必要对整个jQuery有个整体的框架概念,才能方便后面对jQuery源码的分析和学习,以下是我总 ...

  9. jQuery源码分析系列

    声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://git ...

随机推荐

  1. mysql查询今天、昨天、本周、本月、上一月 、今年数据

    mysql数据库中的关于查询日期的一些操作如下: --今天 select * from 表名 where to_days(时间字段名) = to_days(now()); --昨天 --本周 SELE ...

  2. The type org.apache.commons.cli.Options cannot be resolved. It is indirectly referenced from required .class files

    在搭建好Hadoop Eclipse开发环境后,编写map-reduce,遇到如下的问题: 从字面上可以看出,工程缺少org.apache.commons.cli.Options,这个包被间接的被其他 ...

  3. Shiro系列(0) - 权限管理在J2EE企业级开发中的应用与实战

    其实也是应大家要求,讲一下权限管理,之前有讲过,但是没有拿出来细讲,这次索性录了视频从头到尾把shiro讲一遍.后续spring security会另外找个时间也讲一下. 主要内容会包括以下 1.了解 ...

  4. collections集合的总括。

    序言 突然遇到集合的有关面试题,感觉很懵逼,所以特意总结了一下,关于我们常用的 ArrayList.LinkedList.Set等集合的一些区别和用法. 还有,这份微小型总结肯定是从很多博文中摘取精华 ...

  5. vivado2015.4 simulator 存储所有信号到 .wdb 文件 并打开波形文件查看波形

    OS WIN7vivado 2015.4vivado自带的仿真器 vivado project 包含一个block design, block design 中包含AXIPCIE, MIG, INTE ...

  6. 【Android】1.1 开发环境安装和配置

    分类:C#.Android.VS2015: 创建日期:2016-01-20 2016-08-03说明:此版本已过时,最新版本见本博客置顶的内容. 一.安装JDK.SDK.NDK 无论是用C#和VS20 ...

  7. 安装 xcode 5.1.1

    https://developer.apple.com/downloads/ 切换路径xcode 路径.然并卵,不好用 http://cms.35g.tw/coding/xcode-select-%E ...

  8. 每日英语:Political Gridlock, Beijing Style

    To admirers outside the country, China's political system stands far above the dysfunctional democra ...

  9. 深入HBase架构解析(一)[转]

    前记 公司内部使用的是MapR版本的Hadoop生态系统,因而从MapR的官网看到了这篇文文章:An In-Depth Look at the HBase Architecture,原本想翻译全文,然 ...

  10. 使用canvas绘制扇形图

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...