$.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;
如果你知道原型就會立即明白他的意思