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: '学士' }
    }
    */
    
  • 相关阅读:
    raw_input() 与 input()对比
    你很熟悉CSS,却没掌握这些CSS技巧
    CSS样式设置
    javascript基本语法和变量(转)
    手机/移动前端开发需要注意的20个要点
    移动端”宴席知多少
    git第一次提交代码到远程仓库
    java对过反射调用方法
    站点收集
    别人抢红包,我们研究一下红包算法
  • 原文地址:https://www.cnblogs.com/HenuAJY/p/14952827.html
Copyright © 2011-2022 走看看