本文参考代码为jQuery 2.0.3javascript
使用jQuery时,都是相似于$('XXX').xxx()的用法,那么先来找找$java
在jQuery源码最后几行能够看到: (代码8826行)jquery
window.jQuery = window.$ = jQuery;
在这步中将 $ 也就是 jQuery 挂载到了window对象上 , 因此能够在页面上直接使用$() , 接下来找找jQuery函数的定义数组
源码60行位置能够看到以下:(代码60行)函数
jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context, rootjQuery ); },
在这里定义了一个叫jQuery的函数变量,在这里用new返回了一个实例对象,这样作就使得使用jQuery时不用new进行实例化了,只须要$()就建立了实例对象,ui
那么接着去看看这个init函数,因为jQuery中的init函数很是复杂,这里进行下简写,只考虑选择器为ID的状况(代码96行)this
jQuery.fn = jQuery.prototype = { init: function( selector, context, rootjQuery ) { var elem,match; var rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/; match = rquickExpr.exec( selector ); elem = document.getElementById( match[2] ); if ( elem && elem.parentNode ) { this.length = 1; this[0] = elem; } this.context = document; this.selector = selector; return this; } }
jQuery.fn在这充当jQuery.prototype别名的做用,在jQuery.prototype中的init函数返回了一个数组,里面放着指定ID的引用,到了这里就实现了 $('#ID')prototype
jQuery.fn.init是构造函数的话原型方法就应该在jQuery.fn.init.prototype中,然而jQuery中分为静态方法和实例方法,全部实例方法放在了jQuery.fn中,这些实例方法也便是$('#'ID).xx()中那个xx,在jQuery源码init函数下方紧跟着就对原型进行了修改 (代码283行)code
jQuery.fn.init.prototype = jQuery.fn;
到这里也就把jQuery的原型对象赋值给了init的原型,所以使用$()返回的对象就能够使用jQuery原型上的方法了。对象
更多jquery分析能够参考 http://nuysoft.iteye.com/blog/1190542