jquery2.6 源码学习

以下是对jquery源码学习的一些总结,待完善...

1.js文件总体结构如下: (function(){})(...省略3548行); 这应该相当于eval 一个function.

2. 每个$("")都会生成一个jQuery的对象,构造函数如下:

var jQuery = window.jQuery = window.$ =

function( selector, context )

{

return new jQuery.fn.init( selector, context );

}

3.jQuery.fn = jQuery.prototype={...}

对jQuery类的prototype赋值.他和jQuery.fn共享对象.

jQuery.fn.init.prototype = jQuery.fn; 再把jQuery.fn.init的prototype设为jQuery.fn即jQuery.prototype.

构造函数( return new jQuery.fn.init( selector, context ); ) 返回的都是一个jQuery对象.

4.jQuery.extend = jQuery.fn.extend = function() {...} 定义extend,该方法调用时将参数对象中的成员拷贝到

jQuery类上.jQuery[name] = objet[name];

5.jQuery.each(object, callback, args)函数就是通过extend方法加到jquery对象上的.调用时方式如下:

jQuery.each({

parent: function(elem){return elem.parentNode;},

parents: function(elem){return jQuery.dir(elem,"parentNode");},

next: function(elem){return jQuery.nth(elem,2,"nextSibling");},

}, function(name, fn){

jQuery.fn[ name ] = function( selector ) {

var ret = jQuery.map( this, fn );

if ( selector && typeof selector == "string" )

ret = jQuery.multiFilter( selector, ret );

return this.pushStack( jQuery.unique( ret ) );

};

});

jQuery.each中关键是通过 callback.apply( object[ name ], args )让object[ name ]对象(

如function(elem){return elem.parentNode;} )执行方法

function(name, fn){

jQuery.fn[ name ] = function( selector ) {

var ret = jQuery.map( this, fn );

if ( selector && typeof selector == "string" )

ret = jQuery.multiFilter( selector, ret );

return this.pushStack( jQuery.unique( ret ) );

};

}从而将object中的成员(方法)拷贝到jQuery.fn即jQuery.prototype上,从而增加jQuery对象上的方法