angular.copy() 深拷贝

定义:
复制一个对象或者一个数组
1. 如果省略了destination,一个新的对象或数组将会被创建出来;
2. 如果提供了destination,则source对象中的所有元素和属性都会被复制到destination中;
3. 如果source不是对象或数组(例如是null或undefined), 则返回source;
4. 如果source和destination类型不一致,则会抛出异常。 注意:这个是单纯复制覆盖,不是类似继承。

使用方法:

angular.copy(source, [destination]);

参数:

参数名称 参数类型 描述
source * 被copy的对象. 可以使任意类型, 包括null和undefined.
destination (optional) Object,array copy去的目的地. 可以省略, 如果不省略, 其必须和source是同类

source的值会完全把destination的值覆盖掉

angular.module('copyApp', []).controller('CopyController', ['$scope', function($scope) {var source={name:'chentian',age:27,email:'666@qq.com',clothse:{clothse1:'aaa',clothse2:'bbb',clothse3:'ccc',clothse4:'ddd',}};var destination={money:'10000',house:'1',car:'2'};console.warn('destination',destination);var test=angular.copy(source,destination);console.warn('test',test);console.warn('source',source);console.warn('destination',destination);}]);

angular.extend()

定义:
依次将第二个参数及后续的参数的第一层属性(不管是简单属性还是对象)拷贝赋给第一个参数的第一层属性,如果第一层属性是对象,则引用的是同一个对象,并返回第一个参数对象。

使用方法:

angular.extend(destination, [source]);

实例一:var r = angular.extend(b, a);将对象a的第一层属性(不管是简单属性还是对象)拷贝赋给对象b的第一层属性,如果是对象,则是引用的是同一个对象,并返回对象b

var a = {name : 'bijian',address : 'shenzhen',family : {num : 6,amount : '80W'}
};
var b = {};var r = angular.extend(b, a);
console.log('a:' + JSON.stringify(a));
console.log('b:' + JSON.stringify(b));
console.log('r:' + JSON.stringify(r));b.address = 'hanzhou';
b.family.amount = '180W';
console.log('a:' + JSON.stringify(a));
console.log('b:' + JSON.stringify(b));
console.log('r:' + JSON.stringify(r));//运行结果:a:{"name":"bijian","address":"shenzhen","family":{"num":6,"amount":"80W"}}
b:{"name":"bijian","address":"shenzhen","family":{"num":6,"amount":"80W"}}
r:{"name":"bijian","address":"shenzhen","family":{"num":6,"amount":"80W"}}a:{"name":"bijian","address":"shenzhen","family":{"num":6,"amount":"180W"}}
b:{"name":"bijian","address":"hanzhou","family":{"num":6,"amount":"180W"}}
r:{"name":"bijian","address":"hanzhou","family":{"num":6,"amount":"180W"}}

实例二:var r = angular.extend(b, a, z);相继将对象a、z的第一层属性(不管是简单属性还是对象)拷贝赋给对象b的第一层属性,即如果是对象,则是引用的是同一个对象,并返回对象b

var a = { name : 'bijian',address : 'shenzhen',family : {num : 6,amount : '80W'}
};
var z = {family : {amount : '150W',mainSource : '经营公司'}
};
var b = {};var r = angular.extend(b, a, z);
console.log('a:' + JSON.stringify(a));
console.log('b:' + JSON.stringify(b));
console.log('r:' + JSON.stringify(r));
b.address = 'hanzhou';
b.family.amount = '180W';//这里需要注意的是,z作为最后一个参数b.family.amount会改变z的值,但不会改变a的值。如果将a作为最后一个参数,那么情况反之,z的值不会被修改,a的值会被修改
console.log('a:' + JSON.stringify(a));
console.log('b:' + JSON.stringify(b));
console.log('r:' + JSON.stringify(r));
//运行结果:a:{"name":"bijian","address":"shenzhen","family":{"num":6,"amount":"80W"}}
b:{"name":"bijian","address":"shenzhen","family":{"amount":"150W","mainSource":"经营公司"}}
r:{"name":"bijian","address":"shenzhen","family":{"amount":"150W","mainSource":"经营公司"}} a:{"name":"bijian","address":"shenzhen","family":{"num":6,"amount":"80W"}}
b:{"name":"bijian","address":"hanzhou","family":{"amount":"180W","mainSource":"经营公司"}}
r:{"name":"bijian","address":"hanzhou","family":{"amount":"180W","mainSource":"经营公司"}}

angular中copy和extend用法实例相关推荐

  1. python的for语句用法_python中list循环语句用法实例

    本文实例讲述了python中list循环语句用法.分享给大家供大家参考.具体用法分析如下: Python 的强大特性之一就是其对 list 的解析,它提供一种紧凑的方法,可以通过对 list 中的每个 ...

  2. php中调用go代码,php中的goto的用法实例(代码)

    本篇文章给大家带来的内容是关于php中的goto的用法实例(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 我们先举个简单示例: goto LABEL; //这个标签自定义ec ...

  3. for循环语句例题及解析python_Python中for循环控制语句用法实例

    Python中for循环控制语句用法实例 这篇文章主要介绍了Python中for循环控制语句用法,较为详细的分析了for循环语句的原理与相关使用技巧,本文实例讲述了Python中for循环控制语句用法 ...

  4. java sendmessage函数_vc中SendMessage自定义消息函数用法实例

    本文实例讲述了vc中SendMessage自定义消息函数用法,分享给大家供大家参考.具体如下: SendMessage的基本结构如下: SendMessage( HWND hWnd,  //消息传递的 ...

  5. python list中append()与extend()用法

    列表是以类的形式实现的."创建"列表实际上是将一个类实例化.因此,列表有多种方法可以操作. 1. 列表可包含任何数据类型的元素,单个列表中的元素无须全为同一类型. 2.  appe ...

  6. [转载] python list中append()与extend()用法

    参考链接: Python list extend() 列表是以类的形式实现的."创建"列表实际上是将一个类实例化.因此,列表有多种方法可以操作.  1. 列表可包含任何数据类型的元 ...

  7. aspx repeater 用法_ASP.NET中repeater控件用法实例

    本文实例讲述了ASP.NET中repeater控件用法.分享给大家供大家参考.具体实现方法如下: repeater绑定数据: protected void Page_Load(object sende ...

  8. choose when 改在java中_Mybatis choose when用法实例代码

    mybatis choose when的用法实现代码如下所示: mapper.xml: select a.city_id as CITYID, a.level1_maintain_unit_id as ...

  9. mysql between详解_MySQL中BETWEEN子句的用法实例详解

    这篇文章主要介绍了MySQL中BETWEEN子句的用法详解,是MySQL入门学习中的基础知识,需要的朋友可以参考下 可以使用IN子句来代替相结合的"大于等于和小于等于"的条件. 要 ...

最新文章

  1. 华为手机怎么看图片属性_华为手机音量小怎么办
  2. 彻底弄懂jQuery事件原理一
  3. 【284天】我爱刷题系列(43)
  4. [openjudge] 2797最短前缀 Trie
  5. 世纪互联、微软Azure与无穷小微积分
  6. Science报道新研究:同行评审后的研究仅比预印本研究质量提高4%
  7. [链表|多解法] leetcode 19 删除链表的倒数第N个节点
  8. 51单片机微波炉c语言程序,基于51单片机的微波炉控制C源程序.doc
  9. mysql行列转换case_浅析SQL语句行列转换的两种方法 case...when与pivot函数的应用_MySQL...
  10. 为Autodesk Infrastructure Map Server(AIMS) Mobile Viewer创建自定义控件
  11. unzip命令常用参数
  12. javaWeb图书购物商城
  13. 00截断上传绕过_Getshell | 文件上传绕过整理
  14. 博途重启计算机之后 将继续进行安装,TIA PORTAL V13(博途STEP 7 V13)安装反复要求重新启动计算机问题解决...
  15. 嵌入式软件开发是做什么的?要学哪些课程?
  16. php懂erp是什么意思,ERP是个什么鬼,这里的讲解通俗易懂
  17. 缩小Abaqus结果文件的方法
  18. [2012-08-21] HTTPC 的使用
  19. MySQL时间戳和时间的获取/相互转换/格式化
  20. 工业用微型计算机08,自考《工业用微型计算机》02241 2008年真题 _ 重庆自考网

热门文章

  1. 月亮私房菜——秘制辣椒油!让你辣得够味!辣得过瘾!
  2. 笔记一:画笔、笔刷认识
  3. 银行卡收单____对账__单边账
  4. 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——3.2 动态数据流...
  5. 孩子近视了房间里用什么灯?保护视力的护眼灯
  6. 拒不协助执行会有什么后果?
  7. 电子签名生成的图片为空白,以及生成透明底签名图片转为白色底
  8. 分享一道面试题:10ml试管10ml的水,一个7ml,一个3ml,将10ml分成两个5ml的
  9. 3种方法保护Word文档不可随意编辑
  10. 中小学计算机知识ppt,中小学信息技术课程标准解读.ppt