今天下载了目前最新版的jQuery,jquery-1.3.2.js,开始学习jQuery的源码
因为jQuery与ExtJS有很大的不同,ExtJS比较庞大,比如类分得比较清楚,动态方法、静态方法、属性等只要一看api都能很清楚。ExtJS那样做是因为他是一个比较大的框架,而jQuery却只是一个工具库,小巧和灵活是它的特点,所以在jQuery里我们会看到有很多用法,我们平时根本没有那么用过。
1.当download jquery-1.3.2.js后,打开源代码,会发现整个jquery的一个结构是
(function(){
.....//代码省略
})();
这中间省略部分就是jQuery的主要代码实现部分。刚开始一看还有些看不明白,后来慢慢研究才发现,第一个括号里其实是一个js函数,
平时写函数都是:
//正常的函数写法
function functionName(){
.....
}
//函数调用
functionName();
而jQuery里第一个括号里那个函数只是省略了函数名,在这里就暂时称为匿名函数吧,用括号括起来,只是为了调高优先级来处理。
也就是说你把"(function (){})"换成一个函数名jqueryFun,再看看,此时就成了
jqueryFun();
这不就是调用了jqueryFun这个函数吗!
这样看来,当我们把jquery导入到我们网页里的时候,只要jqurey的代码加载进来就立即执行了jQuery的功能。
(function(){
var
window = this,
undefined,
_jQuery = window.jQuery,
_$ = window.$,
jQuery = window.jQuery = window.$ = function( selector, context ) {
return new jQuery.fn.init( selector, context );
},
quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
isSimple = /^.[^:#\[\.,]*$/;
})();
上面几行代码主要是对jQuery初始化前的一些调定,为了加速jQuery执行,
比如jQuery = window.jQuery = window.$,把jQuery,$等价起来,后面就可以用$符号了。
这样把jQuery注册为window的一个属性,这样使用jQuery和$就像使用window下面的其它属性一样,比如documnt等。
然后return new jQuery.fn.init( selector, context );进行jQuery相关设定的初始化操作!
quickExpr 和isSimple 是两个正则表达式,quickExpr 是检验html标签,isSimple 是检验selector
根据jQuery的作者解释是:
// A simple way to check for HTML strings or ID strings
// (both of which we optimize for)
quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
// Is it a simple selector
isSimple = /^.[^:#\[\.,]*$/;