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 相关文章推荐
Zend Studio 无法启动的问题解决方法
Dec 04 PHP
php5.3 废弃函数小结
May 16 PHP
PHP中Session引起的脚本阻塞问题解决办法
Apr 08 PHP
thinkphp特殊标签用法概述
Nov 24 PHP
php中Socket创建与监听实现方法
Jan 05 PHP
php实现微信公众号主动推送消息
Dec 31 PHP
详解PHP防止盗链防止迅雷下载的方法
Apr 26 PHP
ThinkPHP实现登录退出功能
Jun 29 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
基于swoole实现多人聊天室
Jun 14 PHP
PHP实现的用户注册表单验证功能简单示例
Feb 25 PHP
在laravel中实现事务回滚的方法
Oct 10 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
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
javascript入门·图片对象(无刷新变换图片)\滚动图像
2007/10/01 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
js Date概念详细介绍
2013/11/22 Javascript
jquery实现背景墙聚光灯效果示例分享
2014/03/02 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
封装属于自己的JS组件
2016/01/27 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
JavaScript简单获取系统当前时间完整示例
2016/08/02 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
详解vue2.6插槽更新v-slot用法总结
2019/03/09 Javascript
JS数组方法slice()用法实例分析
2020/01/18 Javascript
如何在selenium中使用js实现定位
2020/08/18 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
详解Python迭代和迭代器
2016/03/28 Python
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
详解Python odoo中嵌入html简单的分页功能
2019/05/29 Python
Python实现代码统计工具
2019/09/19 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
2021/02/16 Python
Stubhub英国:购买体育、演唱会和剧院门票
2018/06/10 全球购物
工业设计专业个人求职信范文
2013/12/28 职场文书
军训 自我鉴定
2014/02/03 职场文书
运动会跳远加油稿
2014/02/20 职场文书
向领导表决心的话
2014/03/11 职场文书
《狼和小羊》教学反思
2014/04/20 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
盲山观后感
2015/06/11 职场文书
青涩记忆观后感
2015/06/18 职场文书
2019财务管理制度最新范本!
2019/07/09 职场文书