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 foreach 使用&(与运算符)引用赋值要注意的问题
Feb 16 PHP
谨慎使用PHP的引用原因分析
Sep 06 PHP
解析php中反射的应用
Jun 18 PHP
PHP加密扩展库Mcrypt安装和实例
Nov 10 PHP
ThinkPHP实现将本地文件打包成zip下载
Jun 26 PHP
推荐10个提供免费PHP脚本下载的网站
Dec 31 PHP
php使用number_format函数截取小数的方法分析
May 27 PHP
php版交通银行网银支付接口开发入门教程
Sep 26 PHP
php 7新特性之类型申明详解
Jun 06 PHP
PHP实现字符串的全排列详解
Apr 24 PHP
laravel多条件查询方法(and,or嵌套查询)
Oct 09 PHP
php字符串函数 str类常见用法示例
May 15 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
ob_start(),ob_start('ob_gzhandler')使用
2006/12/25 PHP
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
PHP中的事务使用实例
2015/05/26 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
javascript document.images实例
2008/05/27 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
基于jquery封装的一个js分页
2011/11/15 Javascript
Javascript 遮罩层和加载效果代码
2013/08/01 Javascript
jQuery DOM操作实例
2014/03/05 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
jQuery中hasClass()方法用法实例
2015/01/06 Javascript
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
2020/02/06 NodeJs
BootStrap前端框架使用方法详解
2020/02/26 Javascript
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
Python使用add_subplot与subplot画子图操作示例
2018/06/01 Python
python3 反射的四种基本方法解析
2019/08/26 Python
Python partial函数原理及用法解析
2019/12/11 Python
opencv实现图像几何变换
2021/03/24 Python
中学教师岗位职责
2013/11/26 职场文书
超市采购员岗位职责
2014/02/01 职场文书
会议邀请书范文
2014/02/02 职场文书
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书
行政前台岗位职责
2015/04/16 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
2016年12月份红领巾广播稿
2015/12/21 职场文书
党员干部学习心得体会
2016/01/23 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书