jQuery 源码分析笔记


Posted in PHP onMay 25, 2011

jQuery的宗旨是Write Less, Do More。它对JavaScript的开发风格侵入性不如YUI那么强,当然也不如Dojo和YUI如此庞大。它极大的简化了JavaScript的日常开发工作,主要是DOM元素的操作(从名字Query就可以看出)。另外一个主要工作就是每个前端开发者都需要面对的浏览器兼容性。jQuery兼容所有主流浏览器的大部分版本,从万恶的IE6开始直到Firefox,Chrome等现代浏览器。除了居于核心的一小部分代码之外,剩下的jQuery都是松散的函数,扩展性很强。http://plugins.jquery.com上有成千上万的jQuery插件,你需要的功能几乎都有对应的jQuery插件,而且不止一个。
jQuery代码的头部是License声明。采用了GPLv2和MIT双协议。而在jQuery声明下是另一个项目的声明:Sizzle。这是jQuery作者另外的一个开源项目,在MIT、BSD和GPL下发布。它是一个独立的selector实现(pure-JavaScript CSS selector engine),可以独立使用。它的压缩版本只有3KB多一点,号称效率最高的选择器实现。jQuery从1.3开始使用Sizzle代替了原来的selector实现。
JS代码中有大量的()和{},这里使用的是Vim阅读,因为%命令可以快速的找到匹配的括号。
代码总体结构和变量
jQuery的代码整体上就是一个匿名函数调用:

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

这是为了避免污染全局对象,同时也可以方便的管理执行上下文。这个技巧在JS代码中经常见到,在jQuery代码中也很常见。比如,在jQuery和其他JS库同时使用时,$符号可能已经被使用了。为了仍然使用$符号:
(function ($) { 
// $("...")... 照常使用$ 
})(jQuery);

在这里传入真正的jQuery对象。
下面进入真正的实现部分,首先是$,也就是jQuery对象的声明,其中最基本的两个成员也列出来了:
var jQuery = (function() { 
var jQuery = function(selector, context) { 
// 真正的初始化函数 
return new jQuery.fn.init(selector, context, rootjQuery); 
}, 
// 一大堆变量声明 
// fn是主要的函数实现点,也是jQuery插件的起点。实际上就是JS原型 
jQuery.fn = jQuery.prototype = { 
}; 
// 一个扩展对象用的函数,可以动态地往对象上加成员。以后往jQuery里面加成员都是用extend函数完成的。 
jQuery.extend = jQuery.fn.extend = function() { 
}; 
// ... 
return jQuery; 
})();

jQuery对象是核心对象,所有$(...)得到的都是jQuery对象,除了少部分直接实现在jQuery下的Utility函数之外,大部分函数都是用extend方法加到jQuery对象里的。
PHP 相关文章推荐
PHP中实现进程间通讯
Oct 09 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
Nov 07 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
Nov 29 PHP
CURL的学习和应用(附多线程实现)
Jun 03 PHP
linux实现php定时执行cron任务详解
Dec 24 PHP
php使用cookie显示用户上次访问网站日期的方法
Jan 26 PHP
php通过array_shift()函数移除数组第一个元素的方法
Mar 18 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
Jun 19 PHP
教你在PHPStorm中配置Xdebug
Jul 27 PHP
详解php比较操作符的安全问题
Dec 03 PHP
分析php://output和php://stdout的区别
May 06 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
May 25 #PHP
JS 网站性能优化笔记
May 24 #PHP
PHP文件打开、关闭、写入的判断与执行代码
May 24 #PHP
php Rename 更改文件、文件夹名称
May 24 #PHP
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
May 24 #PHP
php 定界符格式引起的错误
May 24 #PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
May 24 #PHP
You might like
php多文件打包下载的实例代码
2017/07/12 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
2017/07/27 PHP
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
2013/10/29 Javascript
学习JavaScript设计模式(继承)
2015/11/26 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
JS获取url参数,JS发送json格式的POST请求方法
2018/03/29 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
vue实现手机端省市区区域选择
2019/09/27 Javascript
详解如何在Vue项目中发送jsonp请求
2019/10/25 Javascript
微信小程序实现电子签名功能
2020/07/29 Javascript
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
JS实现拖动模糊框特效
2020/08/25 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
可拖拽组件slider.js使用方法详解
2020/12/04 Javascript
Django框架中方法的访问和查找
2015/07/15 Python
python 连接sqlite及简单操作
2017/06/30 Python
python kmeans聚类简单介绍和实现代码
2018/02/23 Python
python如何将图片转换为字符图片
2020/08/19 Python
Python基础学习之函数方法实例详解
2019/06/18 Python
Django-Model数据库操作(增删改查、连表结构)详解
2019/07/17 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
升职自荐信范文
2013/10/05 职场文书
银行求职推荐信范文
2013/11/30 职场文书
向领导表决心的话
2014/03/11 职场文书
优秀团员自我评价范文
2014/04/23 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
求职信范文大全
2014/05/26 职场文书
关于爱国的标语
2014/06/24 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
幼儿园开学家长寄语(2015秋季)
2015/05/27 职场文书
关爱空巢老人感想
2015/08/11 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书