jquery的$.extend和$.fn.extend作用及区别,兼它们的一些小细节

 $.extend(obj);是为了扩展jquery本身,为类添加新的方法
   $.fn.extend(obj);给JQUERY对象添加方法。
如(1):

   $.extend({

        add:function(a,b){

            return a+b;
        }

    })

    $.add(5,8) //return  13

注意没有,这边的调用直接调用,前面不用任何对象。直接$.+方法名

(2):

$.fn.extend({

    clickwhile:function(){

        $(this).click(function(){

             alert($(this).val()) 

        })

    }

})

$('input').clickwhile();//当点击输入框会弹出该对象的Value值

注意调用时候前面是有对象的。即$('input') 这么个东西。

前面介绍了它们的本质区别,现在具体介绍一下它们分别的细节
其实$.extend()有两种写法
(1)$.extend(obj);
        这是只有一个参数,代表的意义是:为jQuery类添加类方法,可以理解为添加静态方法,也就是全局方法。
(2)$.extend( target, object1,  object2,  object3,  object4,[objectN]);
        这是两个或两个以上的参数,代表的意义是:用一个或多个其他对象来扩展一个对象,返回被扩展的对象。即也就是扩展和覆盖了第一个对象。
      

(function ($) {
            var aaa={name:'1',age:'20',sex:'NV'};
            var bbb={name:'2',age:'18'};
            var ccc = $.extend( aaa, bbb);
            alert(ccc.sex);//NV
            alert(aaa.name);//2
        })(jQuery);

不知大家见过 $.extend({}, aaa, bbb)中带{}吗?请看下面

(function ($) {
            var aaa={name:'1',age:'20',sex:'NV'};
            var bbb={name:'2',age:'18'};
            var ccc = $.extend({}, aaa, bbb);
            alert(ccc.sex);//NV
            alert(aaa.name);//1
        })(jQuery);

为何alert(aaa.name)的结果不同?如果你知道就不用往下看了
      这是因为:多个对象参数合并时,会破坏第一个对象的结构,所以可传递一个空对象作为第一个参数

$.fn.extend(obj);
     $.fn 中的fn是什么意思?
    其实是prototype,即$.fn=$.protoytpe;
   如果你知道原型就会立即明白他的意思