$.extend用法详解(一)
jQuery.extend( target [, object1 ] [, objectN ] )
在这里target是Object,它有两个作用:
1. 如果后面没有对应的object1及objectN等等,它的作用就是给jQuery命名空间本身对象进行扩展,可以为jQuery增加新的共用方法和属性。
2.存在object1,及objectN等等,object1,objct2,...objectN会合并到target中,返回值为合并后的target,由此可以看出该方法合并后,是修改了target的结构的。
如果不想修改原始对象的结构,可以创建target为空对象,将后面的对象属性合并到target中,然后返回给新的object中:

同时,如果后面的参数如果和前面的参数存在相同的名称,那么后面的会覆盖前面的参数值。
demo如下:
var obj1 = { apple:0, banana:{ weight:20,price:100 }, cherry:97 } var obj2 = { banana:{price:200}, durian:100 } var obj = $.extend(obj1,obj2); console.log("obj1为",obj1); console.log("obj为",obj);
输出:
由此可知,obj1的被修改,和obj都指向同一个对象,并且,参数相同的话,后面对象会覆盖前面。
var obj = $.extend({},obj1,obj2); console.log(obj);
这个obj也指向了同一个对象。

二,jQuery.extend( [deep ], target, object1 [, objectN ] )
在这里第一个参数deep代表是否进行深度拷贝,有两个参数true和false。
下面看官网的例子:
 var object1 = {
         apple: 0,
         banana: { weight: 52, price: 100 },
         cherry: 97
                      };
         var object2 = {
          banana: { price: 200 },
          durian: 100
       };
 
// Merge object2 into object1, recursively
   var obj = $.extend( true, object1, object2 );
   console.log("object1:",object1);
   console.log("obj:",obj);
输出:

深拷贝,也就是说它会将object中的嵌套子对象也进行合并。
如果参数为false的话,代码如下:
var obj = $.extend(false, object1, object2 ); console.log("object1:",object1); console.log("obj:",obj);
输出如下:
输出:
由此可知,false的话object1对象还是原来的结构,没有合并;得到的结果obj则是object1和object2的浅复制。
下面在看两个小例子:
<script>
		var result=$.extend( true, {}, 
     { name: "John", location: {city: "Boston",county:"USA"} }, 
     { last: "Resig", location: {state: "MA",county:"China"} } );
		console.log(result);
	</script>
输出结果如下:

<script>
        var result=$.extend( false, {}, 
     { name: "John", location: {city: "Boston",county:"USA"} }, 
     { last: "Resig", location: {state: "MA",county:"China"} } );
        console.log(result);
    </script>
输出如下:

 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号