jquery2.6 源码学习

http://njuan134.blog.163.com/blog/static/30332917200992823025377/

 

 

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对象上的方法

你可能感兴趣的:(jquery,prototype,Blog)