$.extend()的深拷贝和浅拷贝详细讲解
来源:互联网 发布:excel无法粘贴数据 编辑:程序博客网 时间:2024/06/04 09:01
语法:jQuery.extend( [deep ], target, object1 [, objectN ] )
描述: 将两个或更多对象的内容合并到第一个对象。
关于$.extend()的用法网上有很多文章,在这里指向写写对深浅拷贝的理解
深浅拷贝对应的参数就是[deep],是可选的,为true或false。默认情况是false(浅拷贝),并且false是不能够显示的写出来的。如果想写,只能写true(深拷贝)~~
什么是深、浅拷贝呢?先讲定义,再举例子
在默认情况下,通过$.extend()
合并操作不是递归的(浅拷贝);如果第一个对象的属性本身是一个对象或数组,那么它将完全用第二个对象相同的key重写一个属性。这些值不会被合并。然而,如果将 true
作为该函数的第一个参数,那么会在对象上进行递归的合并(深拷贝)。
浅拷贝(false 默认):如果第二个参数对象有的属性第一个参数对象也有,那么不会进行相同参数内部的比较,直接将第一个对象的相同参数覆盖。
深拷贝(true):如果第二个参数对象有的属性第一个参数对象也有,还要继续在这个相同的参数向下一层找,比较相同参数的对象中是否还有不一样的属性,如果有,将其继承到第一个对象,如果没有,则覆盖。
栗子:
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>Dialog插件测试页面</title> <script type="text/javascript" src="jquery.js"></script><script>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));</script></head><body></body></html>
仔细阅读上面这段代码,去运行看结果,你就会理解什么是深拷贝和浅拷贝了!
转载:
http://www.cnblogs.com/yuqingfamily/p/5813650.html
0 0
- $.extend()的深拷贝和浅拷贝详细讲解
- JS 浅拷贝和深拷贝及extend应用
- $.extend中探索深拷贝和浅拷贝
- c++中 拷贝构造函数的深拷贝和浅拷贝--“浅拷贝”与“深拷贝”
- jquey.extend深拷贝
- Python对象的拷贝,浅拷贝和深拷贝。
- Java的深拷贝和浅拷贝
- Java的深拷贝和浅拷贝
- C++的浅拷贝和深拷贝
- C++的浅拷贝和深拷贝
- Java的深拷贝和浅拷贝
- Java的浅拷贝和深拷贝
- python 的深拷贝和浅拷贝
- Java的深拷贝和浅拷贝
- Java的深拷贝和浅拷贝
- Java的深拷贝和浅拷贝
- Java的深拷贝和浅拷贝
- Java的深拷贝和浅拷贝
- jsp 自定义标签-SimpleTagSupport 使用笔记
- Ubuntu下Apache+SVN+submin实现WEB管理SVN
- Session机制详解
- Android进阶——Volley+Https给你的安卓应用加上SSL证书
- ANR Bug分析
- $.extend()的深拷贝和浅拷贝详细讲解
- 微信小程序 动态设置placeholder和按钮选中取消状态
- 【Spring】Struts和Spring集成
- 拦截器与过滤器区别
- EDA软件_Cadence_Allegro 16.6更改字体大小
- 八大排序算法
- 利用python库打造自己的视频下载器
- 《java语言程序设计》第十章学习总结
- iOS调用reloadRowsAtIndexPaths Crash报异常NSInternalInconsistencyException