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 相关文章推荐
让你同时上传 1000 个文件 (一)
Oct 09 PHP
PHP中cookies使用指南
Mar 16 PHP
也谈php网站在线人数统计
Apr 09 PHP
php 连接mssql数据库 初学php笔记
Mar 01 PHP
Window下PHP三种运行方式图文详解
Jun 11 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
Jul 03 PHP
PHP中怎样防止SQL注入分析
Oct 23 PHP
php实现四舍五入的方法小结
Mar 03 PHP
PHP实现HTML页面静态化的方法
Nov 04 PHP
php_pdo 预处理语句详解
Nov 21 PHP
PHP实现的MD5结合RSA签名算法实例
Oct 07 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 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 全角转半角实现代码
2010/05/16 PHP
PHP中获取变量的变量名的一段代码的bug分析
2011/07/07 PHP
通过php添加xml文档内容的方法
2015/01/23 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
2020/05/15 PHP
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
2015/03/03 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
JS中的THIS和WINDOW.EVENT.SRCELEMENT详解
2015/05/25 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
JS实现物体带缓冲的间歇运动效果示例
2016/12/22 Javascript
Bootstrap CSS使用方法
2016/12/23 Javascript
js以及jquery实现手风琴效果
2020/04/17 Javascript
react系列从零开始_简单谈谈react
2017/07/06 Javascript
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
详解Vue底部导航栏组件
2019/05/02 Javascript
vue实现图片预览组件封装与使用
2019/07/13 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
python中查找excel某一列的重复数据 剔除之后打印
2013/02/10 Python
详解Python中的循环语句的用法
2015/04/09 Python
详解Python中DOM方法的动态性
2015/04/11 Python
python 实现在Excel末尾增加新行
2018/05/02 Python
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
2014年社区庆元旦活动方案
2014/03/08 职场文书
公司任命书模板
2014/06/06 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
月考总结与反思
2015/10/22 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书
原生JS实现飞机大战小游戏
2021/06/09 Javascript
MyBatis 动态SQL全面详解
2021/10/05 MySQL
MySQL中一条update语句是如何执行的
2022/03/16 MySQL