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 str_replace的替换漏洞
Mar 15 PHP
php set_magic_quotes_runtime() 函数过时解决方法
Jul 08 PHP
php将会员数据导入到ucenter的代码
Jul 18 PHP
兼容ie6浏览器的php下载文件代码分享
Jul 14 PHP
php去除头尾空格的2种方法
Mar 16 PHP
php编写简单的文章发布程序
Jun 18 PHP
大家须知简单的php性能优化注意点
Jan 04 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
Mar 07 PHP
thinkphp jquery实现图片上传和预览效果
Jul 22 PHP
php实现自定义中奖项数和概率的抽奖函数示例
May 26 PHP
PHP实现的AES 128位加密算法示例
Sep 16 PHP
PHP高并发和大流量解决方案整理
Dec 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学习资料汇总与网址
2007/03/16 PHP
php获取字符串中各个字符出现次数的方法
2015/02/23 PHP
PHP实现加强版加密解密类实例
2015/07/29 PHP
实例解析php的数据类型
2018/10/24 PHP
Apache站点配置SSL强制跳转443
2021/03/09 Servers
禁止js文件缓存的代码
2010/04/09 Javascript
zShowBox 图片放大展示jquery版 兼容性
2011/09/24 Javascript
精心挑选的15款优秀jQuery 本特效插件和教程
2012/08/06 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
2013/10/23 Javascript
JS截取字符串常用方法详细整理
2013/10/28 Javascript
JQuery中操作Css样式的方法
2014/02/12 Javascript
JavaScript中的闭包
2016/02/24 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
Vue2.0权限树组件实现代码
2017/08/29 Javascript
Vue-router结合transition实现app前进后退动画切换效果的实例
2017/10/11 Javascript
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
详解Python编程中time模块的使用
2015/11/20 Python
Python常用时间操作总结【取得当前时间、时间函数、应用等】
2017/05/11 Python
python3之微信文章爬虫实例讲解
2017/07/12 Python
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
Python通过fnmatch模块实现文件名匹配
2020/09/30 Python
jupyter notebook快速入门及使用详解
2020/11/13 Python
用CSS3的box-reflect设置文字倒影效果的方法讲解
2016/03/07 HTML / CSS
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
英国女鞋购物网站:Moda in Pelle
2019/02/18 全球购物
机械系大学毕业生推荐信
2013/11/27 职场文书
技校毕业生的自我评价
2013/12/27 职场文书
电脑租赁公司创业计划书
2014/01/08 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
教师节倡议书
2014/08/30 职场文书
校长师德表现自我评价
2015/03/05 职场文书
解除租赁合同协议书
2016/03/21 职场文书
ElementUI实现el-form表单重置功能按钮
2021/07/21 Javascript
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫