jQuery.fn = jQuery.prototype={
}
jQuery.extend = jQuery.fn.extend =function(){
}
由以上的代码可以看出,extend方法既是原型方法也是静态方法,并且
jQuery.extend === jQuery.fn.extend//true
他们在堆内存中都指向同一个函数。jQuery的实例也可以访问。
此方法用来扩展调用它的【对象本身】的方法,上面代码中就是用来扩展jQuery和jQuery的原型的方法。
使用语法:
$.extend(deep,target,object1...)
$.fn.extend(deep,target,object1...)
deep:布尔值,表示是否深度拷贝。可省略
target:目标Object,扩展的方法和属性都添加到这个上面。省略时默认为调用此函数的对象。通俗点来说,就是你要将之后的属性合并到哪儿,就是这儿。
object:需要合并的对象。
可以将target,object理解成同一种,都是往前合并。
注:extend()参数只有两种情况,含deep和不含deep。含有deep时,第二个参数则认为是目标对象;不含时,默认为是调用extend函数的对象。
$.extend(obj1,obj2);//将obj1,obj2合并到jQuery对象中。
var o=$.extend(true,{},obj1,obj2};//将obj1,obj2合并到新的对象并返回这个对象。
$.extend(true,box,obj1,obj2);//合并到box中
引申出的问题:
命名空间:开辟另一个空间,将一些对象,方法放在里面,用以区别于其他名称空间相同名字的方法,对象。更是避免全局变量、属性泛滥的好办法。参考
深度拷贝和浅拷贝:
合并对象时,对象的属性有可能又是一个对象,是否合并里面的对象的属性那就是deep。深拷贝时为true,表示合并里面的对象;反之,浅拷贝则为false,表示只拷贝第一层。拷贝过程中,若有相同名称的,均采取后面的覆盖前面的方式。参考