$.extend()的深拷贝和浅拷贝详细讲解

语法:jQuery.extend( [deep ], target, object1 [, objectN ] )app

描述: 将两个或更多对象的内容合并到第一个对象。函数

关于$.extend()的用法网上有不少文章,在这里指向写写对深浅拷贝的理解spa

深浅拷贝对应的参数就是[deep],是可选的,为true或false。默认状况是false(浅拷贝),而且false是不可以显示的写出来的。若是想写,只能写true(深拷贝)~~code

什么是深、浅拷贝呢?先讲定义,再举例子对象

在默认状况下,经过$.extend()合并操做不是递归的(浅拷贝);若是第一个对象的属性自己是一个对象或数组,那么它将彻底用第二个对象相同的key重写一个属性。这些值不会被合并。然而,若是将 true 做为该函数的第一个参数,那么会在对象上进行递归的合并(深拷贝)。blog

浅拷贝(false 默认):若是第二个参数对象有的属性第一个参数对象也有,那么不会进行相同参数内部的比较,直接将第一个对象的相同参数覆盖。继承

深拷贝(true):若是第二个参数对象有的属性第一个参数对象也有,还要继续在这个相同的参数向下一层找,比较相同参数的对象中是否还有不同的属性,若是有,将其继承到第一个对象,若是没有,则覆盖。递归

栗子:get

var object1 = { apple: 0, banana: { weight: 52, price: 100 }, cherry: 97 }; var object2 = { banana: { price: 200 }, durian: 100 }; //默认状况浅拷贝 //object1--->{"apple":0,"banana":{"price":200},"cherry":97,"durian":100} //object2的banner覆盖了object1的banner,可是weight属性未被继承 //$.extend(object1, object2);

//深拷贝 //object1--->{"apple":0,"banana":{"weight":52,"price":200},"cherry":97,"durian":100} //object2的banner覆盖了object1的banner,可是weight属性也被继承了呦
$.extend(true,object1, object2); console.log('object1--->'+JSON.stringify(object1));

仔细阅读上面这段代码,去运行看结果,你就会理解什么是深拷贝和浅拷贝了!

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息