浅谈js中的浅拷贝和深拷贝
在js中如何把一个对象里的属性和方法复制给另一个对象呢?
下面举一个例子来说明:
var person={name:'chen',age:18};
var son={sex:'男'};
function clone(p,s){
var s=s||{};//判断s对象是否存在,不存在则定义s为空对象
for(var prop in p){
s[prop]=p[prop];
};
return s;//返回s对象
};
clone(person,son);
调用clone函数最终返回的结果为 {sex: "男", name: "chen", age: 18}.
但是假如 var person={name:'chen',age:18,man:{hight:188}};即person 对象里包含一个子对象man;
那么在复制时浅拷贝只是将子对象的一个引用地址复制给son对象;son和person里的man 属性都指向同一个对象,故改变任一个都能影响到另外一个:例子如下:
var person={name:'chen',age:18,man:{hight:188}}
var son={sex:'男'};
function clone(p,s){
var s=s||{};//判断s对象是否存在,不存在则定义s为空对象
for(var prop in p){
s[prop]=p[prop];
};
return s;//返回s对象
};
clone(person,son);
son.name='ze';
console.log(son.name);//打印ze
console.log(person.name);//打印chen
son.man.hight=1999;
console.log(son.man.hight);//打印1999
console.log(person.man.hight);//打印1999
浅谈js中的浅拷贝和深拷贝的更多相关文章
- 浅谈JS中的浅拷贝与深拷贝
前端工程师应该都比较熟悉浅拷贝和深拷贝的概念,在日常业务代码的过程中,特别是做数据处理的时候,经常行的会遇到,比如如何在不修改原对象的基础上,重新生成一个一模一样的对象,加以利用,又或是,如何巧妙地运 ...
- 浅谈JS中的闭包
浅谈JS中的闭包 在介绍闭包之前,我先介绍点JS的基础知识,下面的基础知识会充分的帮助你理解闭包.那么接下来先看下变量的作用域. 变量的作用域 变量共有两种,一种为全局变量,一种为局部变量.那么全局变 ...
- 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂
浅谈JS中的!=.== .!==.===的用法和区别 var num = 1; var str = '1'; var test = 1; test == num //tr ...
- 浅谈JS中 var let const 变量声明
浅谈JS中 var let const 变量声明 用var来声明变量会出现的问题: 1. 允许重复的变量声明:导致数据被覆盖 2. 变量提升:怪异的数据访问.闭包问题 3. 全局变量挂载到全局对象:全 ...
- 由项目浅谈JS中MVVM模式
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1. 背景 最近项目原因使用了durandal.js和knock ...
- js架构设计模式——由项目浅谈JS中MVVM模式
1. 背景 最近项目原因使用了durandal.js和knockout.js,颇有受益.决定写一个比较浅显的总结. 之前一直在用SpringMVC框架写后台,前台是用JSP+JS+标签库,算是很 ...
- js中的浅拷贝和深拷贝
说说最近所学:浅拷贝和深拷贝也叫做浅克隆和深克隆,深浅主要针对的是对象的"深度",常见的对象都是"浅"的,也就是对象里的属性就是单个的属性,而"深&q ...
- JS中的浅拷贝与深拷贝
浅拷贝与深拷贝的区别: 浅拷贝: 对基本类型和引用类型只进行值的拷贝,即,拷贝引用对象的时候,只对引用对象的内存地址拷贝,新旧引用属性指向同一个对象,修改任意一个都会影响所有引用当前对象的变量. 深拷 ...
- 浅谈js中的数据类型,使用typeof获取js数据类型
JS中的数据类型 1):Undefined——值未定义 注:Undefined类型只有一个值,即特色的undefined.在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined ...
随机推荐
- js精要之函数
数组排序 ,,,,,]; arr.sort(function(a,b){ return a-b; }); console.log(arr); arguments 参数存储对象 function ref ...
- javascript运行机制详解: 再谈Event Loop(转)
作者: 阮一峰 日期: 2014年10月 8日 一年前,我写了一篇<什么是 Event Loop?>,谈了我对Event Loop的理解. 上个月,我偶然看到了Philip Roberts ...
- 初学HTML5
Document 什么是HTML5? 首先了解html:html即超文本语言,这是一种语法简单.结构清晰的语 解析型文档,他不同于其他的编程语言. html5就是html网页标记语言的第五次重大更新产 ...
- Flash、Ajax各自的优缺点,在使用中如何取舍?
1.Flash ajax对比 Flash适合处理多媒体.矢量图形.访问机器:对CSS.处理文本上不足,不容易被搜索. Ajax对CSS.文本支持很好,支持搜索:多媒体.矢量图形.机器访问不足. 共同点 ...
- HashTable源码分析
本次分析代码为JDK1.8中HashTable代码. HashTable不允许null作为key和value. HashTable中的方法为同步的,所以HashTable是线程安全的. E ...
- A manager is becoming more and more popular in China
A manager is becoming more and more popular in China; many people want to possess a position like th ...
- JSP 学习二
在基于昨天对JSP学习的基础上,今天我们来学习JSP的指令和JSP 对中文的处理. 一.JSP指令简介 JSP 指令是为JSP引擎而设计,它并不直接产生任何可见的输出,而只是告诉引擎如何处理JSP页面 ...
- JavaScript 毒瘤和糟粕(需要注意的地方)
简介 我想这是在我总结JavaScript系列中最为需要注意的,最为重要的内容.你必须要去了解这些问题特性,才能准备好应对措施,这真的很重要. 毒瘤 全局变量 全局变量的存在的确是带来了方便,但是我觉 ...
- 从Angular2路由引发的前后端路由浅谈
笔者的学习进度比较慢,直到两年以前写的网站都还是以服务端为主导的,即网站的所有视图都由服务器视图模板来渲染,笔者使用的是 DotNet MVC,开发套路就是在Controller里面写Action,在 ...
- 读书笔记 effective c++ Item 22 将数据成员声明成private
我们首先看一下为什么数据成员不应该是public的,然后我们将会看到应用在public数据成员上的论证同样适用于protected成员.最后够得出结论:数据成员应该是private的. 1. 为什么数 ...