文章转载自: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()没有必要去比较,两个都可扩展方法,但后者是静态方法;前者主要用于扩展插件,后者主要用于合并对象。