参照jQuery 2.0.3版本(https://files.cnblogs.com/files/snoy/jquery-2.0.3.js")来进行的源码分析
从代码的最外层可以看到是一个IIFE即自执行匿名函数
(function(window, undefined) {
})(window)
从代码的21~94行定义了一些变量和函数
重点分析下面的代码 (1)
jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context, rootjQuery );
},
代码的8826行的代码(2)
window.jQuery = window.$ = jQuery;
通过上面(2)代码就把上面(1)jQuery保存起来的函数暴露给window对象了,就可以通过jQuery或者$来访问(1)的函数了
这就是对外提供的接口
代码的96~281给jQuery对象添加一些方法和属性
jQuery.fn=jQuery.prototype={
};
代码的285~347是jQuery继承的一些方法
jQuery.extend = jQuery.fn.extend = function() {
}
代码的349~818是jQuery扩展的一些工具方法类似于静态方法比如说$.trim()
jQuery.extend();
代码的877~2856是Sizzle CSS Selector复杂选择器(http://sizzlejs.com/)
代码的2880~3042是jQuery回调对象作用是函数的统一管理
jQuery.Callbacks=function(){};
代码的3043~3183是延迟对象作用是异步的统一管理
jQuery.extend({
Deferred;function(){},
when:function(){}
});
代码的3184~3295是对浏览器功能的检测,而不是去判断浏览器类型
jQuery.support=(function(support){})({});
代码的3308~3652是对数据data的缓存
代码的3653~3797是对queue的管理
jQuery.extend();
jQuery.fn.extend();
代码的3803~4299是对元素属性的操作
代码的4300~5128是事件操作的相关方法
代码的5140~6057是和DOM有关的操作
代码的6058~6620是元素CSS样式的操作
代码的6621~7854是form表单提交的功能(ajax,cors,load,getJson,getScript。。。)
代码的7785~8584是animate运动的操作
代码的8585~8792是位置和尺寸的操作
代码的8504~8821是jQuery支持模块化的方式
代码的8504~8827是jQuery对外提供的暴露接口