文章轉載自:http://caibaojian.com/jquery-extend-and-jquery-fn-extend.html ,略有補充以及修改
1.不同
雖然js沒有類的概念,但這裏方便理解可以把jQuery看成是一個封裝好的類(類名就是jQuery,或者用$),裏面有各種成員變量,成員函數。用jq選擇器可以生成一個jq對象(如$("#test"))。
以下$代替jQuery。
$.fn.extend()=$.prototype.extend(),擴展的內容可以被任何jq對象使用。
$.extend(object),擴展的函數可以被jq“類”直接使用。可以理解爲添加靜態方法~(注意參數,只對應2 .1)的情形)
2.$.extend()
1) $.extend(object);
說明:給jq“類”擴展靜態方法
例:
$.extend({
max:function(a,b){ return a>b?a:b;},
min:function(a,b){return a<b?a:b;}
});
$.max(2,3);//3
$.min(2,3);//2
2)$.extend(targetObject,mergeObject_1,mergeObject_2,...,mergeObject_N)
說明:merge的內容合併至target,相同的鍵後者的值覆蓋前者的值;會更改target並且返回更改後的target。
相較於1)來說,2)更加常用!
例:
var obj_target={name:"ru",age:"22"};
$.extend(obj_target,{name:"di",sex:"female"});
console.log(obj_target) //{name:"di",age:"22",sex:"female"};
3.$.fn.extend()
可以理解爲插件機制,想要讓jq對象都擁有某種自定義方法的話就可以用這種辦法,閱讀jquery源碼會發現這種方法很常見!
4.小結
其實$.fn.extend()和$.extend()沒有必要去比較,兩個都可擴展方法,但後者是靜態方法;前者主要用於擴展插件,後者主要用於合併對象。