var src1 = {
name:"tom",
age:21
};
var src2 = {
name:"jack",
sex:"男"
};
//将src1、src2合并,合并的结果保存到src1中,并返回给merger
//所以src1被改变了结构,src2没有
//合并之后后面对象的相同属性会覆盖之前对象的
var merger = $.extend(src1,src2);
for(var i in merger){
if(typeof i =="function"){
merger[i]();
}else{
//alert(merger[i]);
}
}
//src1结构被改变,同merger是一样的机构
for(var i in src1){
if(typeof i =="function"){
merger[i]();
}else{
alert(merger[i]);
}
}
for(var i in src2){
if(typeof i =="function"){
merger[i]();
}else{
alert(merger[i]);
}
}
//如果不想覆盖任意变量
//可以有如下形式
//$.extend({},src1,src2);这里就是简单合并并返回合并结果对象了
//如果该方法就只有一个src参数,则是将该src合并到调用extend方法的对象中去
//$.extend({hello:function(){alert('hello');}});就是将hello方法合并到jquery的全局对象中
//如果src1存在嵌套的情况,就要使用extend的深度拷贝的参数$.extend(boolean,dest,src1,src2,src3...)
//这里的boolean不写或者没有,那么默认就是false
var result=$.extend(true, {},
{ name: "John", location: {city:"Boston",county:"USA"} },
{ last: "Resig", location: {state:"MA",county:"China"} } );
//我们可以看出src1中嵌套子对象location:{city:"Boston"},src2中也嵌套子对象location:{state:"MA"},
//第一个深度拷贝参数为true,那么合并后的结果就是:
//result={name:"John",last:"Resig",
//location:{city:"Boston",state:"MA",county:"China"}}
//也就是说它会将src1中的嵌套子对象也进行合并,而如果第一个参数boolean为false,我们看看合并的结果是什么,如下:
var result=$.extend(false, {},
{ name: "John", location:{city:"Boston",county:"USA"} },
{ last: "Resig", location: {state:"MA",county:"China"} }
);
//那么合并后的结果就是:
//result={name:"John",last:"Resig",location:{state:"MA",county:"China"}}
//$.fn.extend({hello:function(){alert('hello');}});就是将hello方法合并到jquery的实例对象中