进行真正有效的对象拷贝

有效的对象拷贝应该是指深拷贝。

浅拷贝 : 就是两个js 对象指向同一块内存地址,所以当obj2拷贝obj1时,一旦其中一个改变,其他的便会改变!

深拷贝:就是重新复制一块内存,这样就不会互相影响。有些时候我们定义一个数组,把这个数据赋值给跟多对象数组中的一个字段,当我们改变对象数组中的该字段的时候,我们会把原来的数组也改变了,这样就会引起其他数组对象中的对应的字段改变,这不是我们想要的。这个时候我们会用到深拷贝。

深拷贝的方法:


<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<script>

		var xiaoming = {
			name : "xiaoming",
			age : 18,
			like : ["eat","sleep","js"],
			gf : {
				name : "xiaohua",
				age : 16,
				bf : {
					name : "xiaohliyu",
					age : 15
				}
			}
		}



		function deepCopy(obj){
	         //判断说明数据类型
			if(typeof obj != "object"){
			    return obj//判断说明不是对象
			}
			var newObj=obj instanceof Array?[]:{};//声明一个新的对象,并进行判断
		      //遍历对象和数组
			for(var k in obj){
			    if((typeof obj[k]=="object")){ //判断说明是否为对象
					deepCopy(obj[k]);
				}
				newObj[k]=obj[k];
			}
			return newObj

		}
                //接下来可以试验一下
		var a=deepCopy(xiaoming)//重新定义一个变量a对deeoCopy进行拷贝
		a.name="likui"//将a对象的name属性重新赋值
		console.log(a)//打印a
                console.log(deepCopy(xiaoming))//打印deeoCopy                
               //得出结果两次打印的结果不为相同

	</script>			
</body>
</html

猜你喜欢

转载自blog.csdn.net/zhang_z97/article/details/80670761