zoukankan      html  css  js  c++  java
  • ES5 深拷贝&浅拷贝

    浅拷贝

    遍历赋值

     
    const student = {
        name: 'anjiyu',
        sex: 'female',
        studyInfo: {
            school: '河南大学',
            level: '本科',
            posi: '学士'
        }
    }
    function deepCopy(srcObj){
        const resObj = {};
        if(srcObj instanceof Array){
            resObj = [];
        }
        for(const key in srcObj){
            resObj[key] = srcObj[key];
        }
        return resObj;
    }
    
    const newStu = deepCopy(student);
    newStu.studyInfo.school = '河大';
    console.log(`老同学的信息`,student);
    /*
    老同学的信息 {
      name: 'anjiyu',
      sex: 'female',
      studyInfo: { school: '河大', level: '本科', posi: '学士' }
    }
     */
    console.log(`新同学的信息`,newStu);
    /*
    新同学的信息 {
      name: 'anjiyu',
      sex: 'female',
      studyInfo: { school: '河大', level: '本科', posi: '学士' }
    }
    */
    
    
    

    Object.create()

    以传入对象作为原型创建一个新对象,并返回。

     
    const student = {
        name: 'anjiyu',
        sex: 'female',
        studyInfo: {
            school: '河南大学',
            level: '本科',
            posi: '学士'
        }
    }
    
    const newStu = Object.create(student);
    newStu.studyInfo.school = '河大';
    console.log(`老同学的信息`,student);
    /*
    老同学的信息 {
      name: 'anjiyu',
      sex: 'female',
      studyInfo: { school: '河大', level: '本科', posi: '学士' }
    }
     */
    console.log(`新同学的信息`,newStu.__proto__);
    /*
    新同学的信息 {
      name: 'anjiyu',
      sex: 'female',
      studyInfo: { school: '河大', level: '本科', posi: '学士' }
    }
    */
    
    
    

    深拷贝

    递归赋值

     
    const student = {
        name: 'anjiyu',
        sex: 'female',
        studyInfo: {
            school: '河南大学',
            level: '本科',
            posi: '学士'
        }
    }
    function deepCopy(srcObj){
        const resObj = {};
        if(srcObj instanceof Array){
            resObj = [];
        }
        for(const key in srcObj){
            const value = srcObj[key];
            if(typeof value === 'object'){
                resObj[key] = deepCopy(value);
            }else{
                resObj[key] = value;
            }
        }
        return resObj;
    }
    
    const newStu = deepCopy(student);
    newStu.studyInfo.school = '河大';
    console.log(`老同学的信息`,student);
    /*
    老同学的信息 {
      name: 'anjiyu',
      sex: 'female',
      studyInfo: { school: '河南大学', level: '本科', posi: '学士' }
    }
     */
    console.log(`新同学的信息`,newStu);
    /*
    新同学的信息 {
      name: 'anjiyu',
      sex: 'female',
      studyInfo: { school: '河大', level: '本科', posi: '学士' }
    }
    */
    
    
    

    JSON.parse JSON.stringify

    这种方法比较常用

     
    const student = {
        name: 'anjiyu',
        sex: 'female',
        studyInfo: {
            school: '河南大学',
            level: '本科',
            posi: '学士'
        }
    }
    
    const newStu = JSON.parse(JSON.stringify(student));
    newStu.studyInfo.school = '河大';
    console.log(`老同学的信息`,student);
    /*
    老同学的信息 {
      name: 'anjiyu',
      sex: 'female',
      studyInfo: { school: '河南大学', level: '本科', posi: '学士' }
    }
     */
    console.log(`新同学的信息`,newStu.__proto__);
    /*
    新同学的信息 {
      name: 'anjiyu',
      sex: 'female',
      studyInfo: { school: '河大', level: '本科', posi: '学士' }
    }
    */
    
  • 相关阅读:
    C#中怎样将数组的顺序打乱随机排序
    C#中怎样获取System.Drawing.Color的所有颜色对象并存到数组中
    ZedGraph怎样实现将图形右键菜单的打印和页面设置合并为打印的二级子菜单
    C#中怎样在ToolStripMenuItem下再添加子级菜单
    Dubbo搭建HelloWorld-搭建服务提供者与服务消费者并完成远程调用(附代码下载)
    AndroidStudio下载安装教程(图文教程)
    Dubbo环境搭建-管理控制台dubbo-admin实现服务监控
    前端冷知识集锦
    console.log()显示图片以及为文字加样式
    vue数据请求显示loading图
  • 原文地址:https://www.cnblogs.com/HenuAJY/p/14952827.html
Copyright © 2011-2022 走看看