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+javascript实现二级级联菜单的制作
May 06 PHP
一道关于php变量引用的面试题
Aug 08 PHP
PHP之数组学习
May 29 PHP
php切割页面div内容的实现代码分享
Jul 31 PHP
在PHP中设置、使用、删除Cookie的解决方法
May 06 PHP
PHP cdata 处理(详细介绍)
Jul 05 PHP
CodeIgniter表单验证方法实例详解
Mar 03 PHP
轻松实现php文件上传功能
Feb 17 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
Apr 27 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
Feb 27 PHP
php swoft框架实例用法
Dec 22 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获取中英混合字符串长度的方法
2014/06/07 PHP
js 方法实现返回多个数据的代码
2009/04/30 Javascript
javascript监听鼠标滚轮事件浅析
2014/06/05 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
js实现照片墙功能实例
2015/02/05 Javascript
javaScript实现滚动新闻的方法
2015/07/30 Javascript
Bootstrap项目实战之首页内容介绍(全)
2016/04/25 Javascript
JavaScript程序中的流程控制语句用法总结
2016/05/23 Javascript
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
全面接触神奇的Bootstrap导航条实战篇
2016/08/01 Javascript
如何在Angular2中使用jQuery及其插件的方法
2017/02/09 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
vue自定义filters过滤器
2018/04/26 Javascript
微信小程序上传图片实例
2018/05/28 Javascript
Vue.js实现的购物车功能详解
2019/01/27 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
超详细的5个Shell脚本实例分享(值得收藏)
2019/08/15 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2019/12/17 Javascript
Python解决鸡兔同笼问题的方法
2014/12/20 Python
python单元测试unittest实例详解
2015/05/11 Python
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
pyqt5利用pyqtDesigner实现登录界面
2019/03/28 Python
Python中函数的基本定义与调用及内置函数详解
2019/05/13 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
TensorFlow2.1.0最新版本安装详细教程
2020/04/08 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
总经理助理职责
2014/02/04 职场文书
采购意向书范本
2014/03/31 职场文书
2014大学生党员评议个人总结
2014/09/22 职场文书
反四风对照检查材料
2014/09/22 职场文书
css3带你实现3D转换效果
2022/02/24 HTML / CSS
asyncio异步编程之Task对象详解
2022/03/13 Python