jQuery.extend 方法学习小记

想必写过jQuery的童鞋都知道$.extend()和$.fn.extend()这两个方法,今天我们先看看它的对象拷贝作用,并做一些测试来验证。


1、 $. extend(dest,src1)    dest是空对象

var aa={};

var bb={

        qqq:[1,2,3,4],

        www:[1,2],

        eee:[

            {name:3,value:3},

            {name:2,value:2},

            {name:3,value:3},

            {name:2,value:2}],

        rrr:[

            {

                points:[100,60,30,50],

                fillColor:"rgba(0, 255, 0, 0.3)",

                comment:"备注1"

            },

            {

                points:[80,80,30,50],

                fillColor:"rgba(255, 0, 0, 0.3)",

                comment:"备注2"

            }]

};

var obj=$.extend(aa,bb);  //以bb为准,bb与aa共有的属性原则:bb完全覆盖aa

在extend(dest,src1,src2,...,srcN)方法中,越后面融合进来的对象所有的有优先级就高,它所有的属性也会覆盖掉前面对象相对应的属性。

2、 $.extend(dest,src1)    dest是有属性对象

var aa={

            name:"aa",

            value:65,

            qqq:[1,2,3],

            www:[1,2,3],

            eee:[

                {name:1,value:1},

                {name:2,value:2},

                {name:3,value:3}

            ],

            rrr:[]

};

var bb={

            qqq:[1,2,3,4],

            www:[1,2],

            eee:[

                {name:3,value:3},

                {name:2,value:2},

                {name:3,value:3},

                {name:2,value:2}],

            rrr:[

            {

                points:[100,60,30,50],

                fillColor:"rgba(0, 255, 0, 0.3)",

                comment:"备注1"

            },

            {

                points:[80,80,30,50],

                fillColor:"rgba(255, 0, 0, 0.3)",

                comment:"备注2"

            }]

  };

var obj=$.extend(aa,bb);  //以bb为准,bb与aa共有的属性原则:bb完全覆盖aa

3、 还有一个重载原型 :$.extend(true,dest,src1)   第一个参数为true,表示需要深度拷贝

警告:不支持第一个参数传递 false 。

var aa={

            name:"aa",

            value:65,

            qqq:[1,2,3],

            www:[1,2,3],

            eee:[

                {name:1,value:1},

                {name:2,value:2},

                {name:3,value:3}

            ]

};

var bb={

            qqq:[5,6,7,8],

            www:[5,6],

            eee:[

                {name:5,value:5},

                {name:6,value:6}

            ]

};

var obj=$.extend(true,aa,bb);

结果:

 

 
7110579-139623c5882b748b.png
 

看到最终结果,可以发现,所谓深度拷贝,就是遍历的去找两个对象之间的属性值的差别,就是不停地一层一层的去覆盖,可以说是获得了aa和bb的并集,但是aa与bb的交集由bb的属性来覆盖。

再来两个简单的例子:

var obj1=$.extend(true,

{name:"a",sex:"male",position:{province:"guangdong",city:"shenzhen",village:"futian"}},

{name:"b",position:{province:"guangxi",city:"guiling"}})

结果:

obj1 = {name:"b",sex:"male",position:{province:"guangxi",city:"guiling",village:"futian"}}

 

var obj2=$.extend(

{name:"a",sex:"male",position:{province:"guangdong",city:"shenzhen",village:"futian"}},{name:"b",position:{province:"guangxi",city:"guiling"}})

结果:

obj2 = {name:"b",sex:"male",position:{province:"guangxi",city:"guiling",village:"futian"}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值