对象引用(浅克隆和深克隆)
来源:互联网 发布:lil pump 知乎 编辑:程序博客网 时间:2024/05/20 03:41
一、s中的数据类型
Js中数据类型分为两大类:(1)基本数据类型:数值、字符串、布尔值、null、undefined(2)复杂数据类型:对象
二、克隆的概念:
浅度克隆:基本数据类型为值传递,对象类型为引用传递
深度克隆:所有属性和方法均完全复制,与原对象完全脱离,也就是说对于新对象的任何修改都不会反映到元对象中。
三.浅克隆的表现:
1.基本数据类型:
var a="a";var b=a;b="b";console.log(a); //aconsole.log(b);//b
2.复杂数据类型:
(1)函数的克隆
函数也是对象,但是函数的克隆通过浅克隆就可以实现
var a=function(){alert(1);};var b=a;b=function(){alert(2);};console.log(a); //function(){alert(1);}console.log(b); //function(){alert(2);}
通过普通的负值方式,就是想了函数的克隆,并且不会影响之前的对象。原因就是函数的克隆会在内存中单独开辟一块空间,互不影响。
(2)普通的对象
var oPerson={oName:"石倩蓉",oAge:"18",oAddress:{province:"beijing"},ofavorite:["swimming",{reading:"history"}]}function clone(obj){var result={};for(var key in obj){result[key]=obj[key];}return result;}var student=clone(oPerson);console.log(oPerson.oAddress.province); //”beijing”student.oAddress.province="shanghai";console.log(oPerson.oAddress.province); //”shanghai”
四.深度克隆实现
为了保证对象的所有属性都被复制到,我们必须知道如果for循环以后,得到的元素仍是Object或者Array,那么需要再次循环,直到元素是原始类型或者函数为止。为了得到元素的类型
/*----------------------------数据类型的判断--------------------------------*/function isClass(obj){if(obj===null) return "null";if(obj===undefined) return "undefined";return Object.prototype.toString.call(obj).slice(8,-1);}/*------------------------------------------------------------*/function deepClone(o){var result;var oClass=isClass(o);if(oClass=="Object"){result={};}else if(oClass=="Array"){result=[];}else{return o;}for(var key in o){result[key]=arguments.callee(copy); //递归调用}return result;}/*------------------------------------------------------------*/var oPerson={oName:"shiqianrong",oAge:"24",oAddress:{province:"shanxi"},oFavoriate:["swimming",{reading:"history book"}]}/*------------------------------------------------------------*/var student=deepClone(oPerson);console.log(oPerson.oAddress.province);student.oAddress.province="shanghai";console.log(oPerson.oAddress.province);
0 0
- 对象引用(浅克隆和深克隆)
- java对象克隆(浅克隆和深克隆)
- Java(对象的深克隆和浅克隆)
- Java对象克隆方法(浅克隆、深克隆)
- Java对象克隆方法(浅克隆、深克隆)
- java中对象的值引用和值拷贝 以及对象的深克隆,浅克隆
- 浅克隆和深克隆
- 深克隆和浅克隆
- 深克隆和浅克隆
- 深克隆和浅克隆
- 深克隆和浅克隆
- 深克隆和浅克隆
- 浅克隆和深克隆
- 浅克隆和深克隆
- 深克隆和浅克隆
- 深克隆和浅克隆
- java(30) - 对象浅克隆和深克隆
- Java对象的浅克隆和深克隆
- AOP之JDK动态代理和CGLib动态代理
- Go项目的目录结构
- 回溯法求解01背包问题
- java.lang.RuntimeException: java.lang.ClassNotFoundException
- maven in action(十)maven项目建立和运行过程中可能的错误
- 对象引用(浅克隆和深克隆)
- 多线程连接MySql
- Android 中的样式与主题
- springmvc如何通过properties读取配置文件
- 解决百人牛牛在部分电脑中摸牌动画卡顿问题,摸牌时改全部刷新为局部刷新
- 八大排序算法之一直接插入排序(C语言)
- motion estimation
- ADO学习(一)基础理论
- celipse安装tomcat插件,找不到server选项