};
var obj2 = {
ccy1 : 19,
ccy2 : {
age : 20
}
}
// 案例1:拓展自定义对象,目标对象是obj1,原对象是obj2
$.extend( obj1, obj2);
// 案例2:深拷贝拓展自定义对象
$.extend( true, obj1, obj2);
// 案例3:拓展jQuery对象,目标对象是jQuery,原对象是obj1
$.extend(obj1);
// 案例4:深拷贝拓展jQuery对象
$.extend(true, obj1);
案例3和案例4执行后,均可以直接通过:$.ccy
来调用该数据,返回18
不论是将obj2拓展到obj1里,还是将obj1拓展到jQuery中,我们都需考虑以下问题:
**1.是否深拷贝、哪一个是目标对象、从哪里开始到哪里结束是原对象;
2.如何深拷贝,
3.而且还要有一定的容错率**
源码很巧妙地解决了这些问题
首先看第一个问题:
开始
我们可以看到,一开始定义了很多变量,并赋予了默认值:
1.默认目标对象target是传入的第一个参数,索引0;
2.传入的参数从i=1开始,到 i=length位置都是原对象;
3.默认为浅拷贝,deep为false
这时,4个案例里,这些参数分别为:
对深浅拷贝的处理:
如果第一个参数的数据类型是布尔型,则该参数是设置深拷贝,将第一个参数的内容复制给deep变量,target则往后顺延,获得下一个索引(i++)的参数
这里做了一个容错处理,如果extend