JQuery插件又分为类扩展方法和对象扩展方法两种,类插件是定义在JQuery命令空间的全局函数,直接通过可调用,如可调用,如.ajax();对象插件是扩展JQuery对象的函数,通过选择的具体对象调用,类似$(dom).html()。
JQuery类扩展方法
直接给$增加方法
1.
2. $.foo=function(){
3. console.log('foo');
4. }
5. $.bar=function(){
6. console.log('bar');
7. }
8.
或者给属性增加命名空间
1.
2. $.plugin={
3. foo:function(){},
4. bar:function(){}
5. }
6.
通过$.extend(object)
1.
2. $.extend({
3. foo:function(){},
4. bar:function(){}
5. })
6.
JQuery对象扩展方法
一般JQuery对象级别方法扩展多写在立即执行函数中,避免别名冲突,另外注意函数返回当前this,以方便链式操作。
直接给的原型的原型.fn增加方法
1.
2. (function($){
3. $.fn.foo=function(){}
4. })(JQuery);
5.
通过调用$.fn.extend()
1.
2. (function($){
3. $.fn.extend({foo:function(){}})
4. })
5.
jQuery.extend(object);
jQuery.extend( target [, object1 ] [, objectN ] )
合并object1, objectN到target对象,如果只有一个参数,则该target对象会被合并到jQuery对象中。
jQuery.extend( [deep ], target, object1 [, objectN ] )
深度复制合并对象,第一个参数是boolean类型的true时,将object1, objectN深度复制后合并到target中;关于深度复制,是将除null, undefined,window对象,dom对象,通过继承创建的对象外的其它对象克隆后保存到target中;所排除的对象,一是考虑性能,二是考虑复杂度(例如dom及window对象,如果克隆复制,消耗过大,而通过继承实现的对象,复杂程度不可预知,因此也不进行深度复制);
深度与非深度复制区别是,深度复制的对象中如果有复杂属性值(如数组、函数、json对象等),那将会递归属性值的复制,合并后的对象修改属性值不影响原对象。
jQuery.fn.extend(object);
jQuery.fn = jQuery.prototype 即指向jQuery对象的原型链,对其它进行的扩展,作用在jQuery对象上面;一般用此方法来扩展jQuery的对象插件。