说明(2017.4.1):
1. 深拷贝要把对象里的“方法”也复制一份出来,“方法”里的“方法和属性”再判断深浅进行拷贝。
2. 办法就是写一个函数deepCopy,里面判断深浅拷贝,然后每个对象都添加这个deepCopy函数。
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 </head> 7 <body> 8 <script type="text/javascript"> 9 var car = { 10 name: "法拉利", 11 }; 12 var person = { 13 name: "张三", 14 age: 19, 15 gender: "男", 16 car: car, 17 }; 18 // 写一个deepCopy函数,给car和person对象添加上(js对象的动态添加属性和方法),省的每个里面要写一遍 19 var deepCopy = function(){ 20 var p = {}; 21 for(var k in this){ 22 if(typeof this[k] === "object"){ 23 p[k] = this[k].deepCopy(); 24 }else{ 25 p[k] = this[k]; 26 } 27 } 28 return p; 29 } 30 // 添加到car和person里,注意后面的deepCopy不要带括号,不然就是等于返回值了 31 car.deepCopy = deepCopy; 32 person.deepCopy = deepCopy; 33 // 新建一个p1,深拷贝一下person,然后检测一下,修改p1的car.name是否会影响到person 34 p1 = person.deepCopy(); 35 p1.car.name = "兰博基尼"; 36 37 console.log(p1); 38 console.log(person); 39 </script> 40 </body> 41 </html>