JavaScript高级 面向对象(9)--深拷贝代码实现

说明(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>
原文地址:https://www.cnblogs.com/Jacklovely/p/6657073.html