• 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>
  • 相关阅读:
    连分数法解佩尔方程特解
    hdu2281&&POJ1320——Pell方程
    Gym
    代入法求递推式
    nodemcu固件的烧录及lua开发
    ESP8266MOD、刷可以使用AT指令的固件、作为客户端向贝壳云端发送固定数据
    Quick Start NodeMCU / ESP8266 12E
    CF388C&&2018EC Final D题——博弈&&水题
    使用cookie登录网盘账号
    Spring的Bean之Bean的基本概念
  • 原文地址:https://www.cnblogs.com/Jacklovely/p/6657073.html
Copyright © 2020-2023  润新知