part 1
注意:本次源码分析选择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 回调对象 : 函数的统一管理
随机推荐
- EaseType 缓动函数
EaseType(动画曲线) EaseType 缓动函数或者我习惯叫它动画曲线,在很多的软件或动画中都有涉及到,下面是摘取的一些资料: 缓函数图例 Tween效果 每一幅图像当鼠标移上去,会有路径效果 ...
- mybatis 字段类型Data相
在项目中查询时间段的sql语句(时间类型为datetime或date)(数据库中的时间类型): <if test="beginTime!=null and beginTime!=''& ...
- Redhat 下 XAMPP 安装和部署 DVWA 教程
XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包.这个软件包原来的名字是 LAMPP,但是为了避免误解,最新的几个版本就改名为 XAMPP 了.它可以在Windo ...
- Activiti工作流搭建---初始化数据库
Activiti介绍 Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理.工作流.服务协作等领域的一个开源的.灵活的.易扩展的可执 ...
- Java客户端连接kafka集群报错
往kafka集群发送消息时,报错如下: page_visits-1: 30005 ms has passed since batch creation plus linger time 加入log4j ...
- P1019 单词接龙
单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一 ...
- 合并多个Excel文件
这条分享来自百度经验https://jingyan.baidu.com/article/e6c8503cb6ed7ee54e1a1811.html
- [NOIP2018]赛道修建
嘟嘟嘟 因为一些知道的人所知道的,不知道的人所不知道的原因,我来改写今年的NOIP了. 现在看这题,心中满是疑问:我当时是多么的zz,这种水题为啥没做出来-- 不管了,说正事. 先考虑部分分. 1.\ ...
- 转:// 再说 Oracle RAC services
应用程序工作负载在Oracle 10g中可以被定为services,也称之为服务,能够在单实例中使用,也能够在RAC中单独使用和管理.因此整个数据库负载能够被分割为多个不同的services,通过管理 ...
- easyUI tab页的显示与隐藏
每天学习一点点 编程PDF电子书免费下载: http://www.shitanlife.com/code 隐藏:tab_option = $('#tabid').tabs('getTab'," ...