##一、静态与实力方法共享的设计 学习jqeury的时候会发现也和其它编程语言一样存在有实例方法和静态方法,

$(".a").each()   //作为实例方法存在
$.each()             //作为静态方法存在 上面是对class=a的进行遍历,下面是可以遍历任何想要遍历的东西,在jQuery中都是通过一个方法实现的

jQuery.prototype = {
    each: function( callback, args ) {
        return jQuery.each( this, callback, args );
    }
} 可以看到这样就能公用一个方法

ajQuery.fn = ajQuery.prototype = {
        name: 'aaron',
        init: function(selector) {
               this.selector = selector;
               return this;
        },
        constructor: ajQuery
}
ajQuery.fn.init.prototype = ajQuery.fn

方法都是要构造才行的,静态的each 可以直接添加进jquery构造器,但是实力方法不行,通过上面的代码将jQuery的原型对象覆盖了init构造器的原型对象,这样也可以直接构造实例方法了。

##二、方法链式调用的设计 使用jQuery的时候经常链式调用,可以一直操作你取出来的一段东西,方便,代码量少

map: function( callback ) {
	return this.pushStack( jQuery.map(this, function( elem, i ) {
		return callback.call( elem, i, elem );
	}));
},

slice: function() {
	return this.pushStack( slice.apply( this, arguments ) );
},

first: function() {
	return this.eq( 0 );
},

last: function() {
	return this.eq( -1 );
},

eq: function( i ) {
	var len = this.length,
		j = +i + ( i < 0 ? len : 0 );
	return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
},

end: function() {
	return this.prevObject || this.constructor(null);
} 比如说以上的各种 return this 这样就可以一直调用了。

##三、插件接口的设计 jQuery 可以自己扩展方法,一般方法存在于下面两个地方

jQuery.extend({
    data:function(){},
    removeData:function(){}
})

jQuery.fn.extend({
    data:function(){},
    removeData:function(){}
}) 就相当于自己扩展其它语言里的实例方法和静态方法。