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缓存技术介绍
Nov 25 PHP
PHP如何编写易读的代码
Jul 10 PHP
php5中类的学习
Mar 28 PHP
PHP 分页类(模仿google)-面试题目解答
Sep 13 PHP
php中使用explode查找某个字符是否存在的方法
Jul 12 PHP
九个你必须知道而且又很好用的php函数和特点
Aug 08 PHP
PHP模板引擎smarty详细介绍
May 26 PHP
PHP接收App端发送文件流的方法
Sep 23 PHP
PHP实现的简单sha1加密功能示例
Aug 27 PHP
laravel框架的安装与路由实例分析
Oct 11 PHP
PHP isset empty函数相关面试题及解析
Dec 11 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和ACCESS写聊天室(八)
2006/10/09 PHP
设置php页面编码的两种方法示例介绍
2014/03/03 PHP
PHP上传图片类显示缩略图功能
2016/06/30 PHP
一个不错的应用,用于提交获取文章内容,不推荐用
2007/03/03 Javascript
JQuery 拾色器插件发布-jquery.icolor.js
2010/10/20 Javascript
jquery与js函数冲突的两种解决方法
2013/09/09 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
浅析Bootstrap验证控件的使用
2016/06/23 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
老生常谈js中0到底是 true 还是 false
2017/03/08 Javascript
详解jQuery中关于Ajax的几个常用的函数
2017/07/17 jQuery
JavaScript生成指定范围随机数和随机序列的方法
2018/05/05 Javascript
深入浅析Node.js 事件循环、定时器和process.nextTick()
2018/10/22 Javascript
JS实现轮播图效果
2020/01/11 Javascript
Pycharm远程调试openstack的方法
2017/11/21 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
python之消除前缀重命名的方法
2018/10/21 Python
ubuntu上安装python的实例方法
2019/09/30 Python
python 字典访问的三种方法小结
2019/12/05 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
2021/01/06 Python
CSS3 Flexbox中flex-shrink属性的用法示例介绍
2013/12/30 HTML / CSS
浅谈h5自定义audio(问题及解决)
2016/08/19 HTML / CSS
香港交友网站:be2香港
2018/07/22 全球购物
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
高级电工工作职责
2013/11/21 职场文书
远程研修随笔感言
2014/02/10 职场文书
商务英语广告词大全
2014/03/18 职场文书
师德师风演讲稿
2014/05/05 职场文书
2015年社区卫生工作总结
2015/04/21 职场文书
暑假打工感想
2015/08/07 职场文书
幼儿园小班教育随笔
2015/08/14 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书
Python实现天气查询软件
2021/06/07 Python
详解Go语言中Get/Post请求测试
2022/06/01 Golang