1.首先关于jQuery的闭包结构
(function(window,undefined){ //jquery代码 jquery=function(selector,context){ return new jQuery.fn.init(selector,context,rootjQuery); }; jQuery.fn=jQuery.prototype={ init:function(selector,context,rootjQuery){ //.... }; } jquery.fn.init.prototype=jQuery.fn; window.jQuery=window.$=jQuery; })(window);为了不造成全局污染和变量冲突,整个实现都包含在一个立即执行的闭包环境里,只在后面暴露了$和jQuery两个变量.
2.jquery实例化对象 在使用$(””),时,其内部调用的是return new jQuery.fn.init(selector,context),其次jquery.fn.init的prototype属性设置为jQuery.fn;所以new jquery.fn.init()生成的对象就能访问到jQuery.fn上的所有原型方法。
3.关于jQuery方法的扩展 extend是jquery中的很重要的一个方法。jquery内部用来扩展静态方法和实例方法。jQuery.extend 是扩展jQuery本身,为类添加新的静态方法。jQuery.fn.extend是给jQuery对象添加实例方法 ,但同时jQuery.fn=jQuery.prototype,所以实例化的对象都能使用。jQuery.extend扩展的静态方法可以通过 .xxx来进行调用,jQuery.fn.extend扩展的实例方法可以通过 ().xxx来调用。 1)在 jQuery.extend() 中,this 的指向是 jQuery 对象(或者说是 jQuery 类),所以这里扩展在 jQuery 上;且上下文指向是jQuery构造器 2)在 jQuery.fn.extend() 中,this 的指向是 fn 对象,前面有提到 jQuery.fn = jQuery.prototype ,也就是这里增加的是原型方法,也就是对象方法。