jQuery 总体源码结构笔记
// 最外层是一个自调用函数
( function( window,undefined ){
// 声明一个jQuery构造函数
var jQuery = ( function(){
// 将jQuery构造函数覆盖改成实例
var jQuery = function(){
// 说明我们使用的jQuery对象并不是直接使用jQuery构造函数构造的,只是两者的原型一样而已
return new jQuery.fn.init();
}
// 将jQuery.prototype简写为jQuery.fn
jQuery.fn = jQuery.prototype = {
constructor = jQuery,
// 初始化jQuery对象
init: function(){...}
}
// 构造jQuery实例的时候重新制定了init函数的原型
jQuery.fn.init.prototype = jQuery.fn;
jQuery.extend = jQuery.fn.extend = function(){...};
jQuery.extend({...});
return jQuery;
} )();
// 添加全局变量$和jQuery,两者都是一个实例,并不是构造函数
window.jQuery = window.$ = jQuery;
} )(window);
总结: 1.在函数jQuery()函数内部使用new创建一个实例;
2.jQuery实例不是直接有jQuery函数构造,而是通过一个init函数间接实现,为了不实例化jQuery函数中那些在内部使用的方法和属性;
3.对一些太长的标识符进行简缩比如jQuery.fn,$;
4.将jQuery实例付给全局变量jQuery
5.传入window对象,变成局部变量,来缩短查找window对象时候搜索的作用域链长度。
6.设置形参undefined可以起到缩短搜索的作用域链,而不传入参数是因为,外部的undefined可能存在被个人修改,不传入时它的默认值就是undefined,这一最保险