zoukankan      html  css  js  c++  java
  • 浅拷贝和深拷贝的区分及实现

    浅拷贝和深拷贝只针对object和array这样的复杂对象,一般浅拷贝只复制一层对象的属性,深拷贝则递归复制了所有的层级;

    //浅拷贝函数 浅拷贝只是对对象地址进行了复制,并没有开辟新的栈,复制的结果就是两个对象指向同一个地址,即修改其中一个对象的属性
    //则另一个对象的属性也会变化
    var obj = {a: 1, arr: [1, 2, 3]};
    var copyObj = copy(obj);
    function copy(src) {
    var dst = {};
    for (var prop in src) {
    if (src.hasOwnProperty(prop)) {
    dst[prop] = src[prop];
    }
    }
    return dst;
    }
    document.write(obj.arr);
    //深拷贝
    var china = {
    nation: '中国',
    birthplaces: ['北京', '上海', '广州'],
    skincolr: 'yellow',
    friends: ['sk', 'ls']
    };
    //深拷贝函数 深拷贝是开辟新的栈,两个对象对应不同的地址,修改一个对象的属性不会改变另一个对象的属性
    function deepCopy(o, c) {
    var c = c || {};
    for (var i in o) {
    if(typeof o[i]==='object'){
    if(o[i].constructor===Array){
    c[i]=[];
    }else {
    c[i]={};
    }
    deepCopy(o[i],c[i])
    }else {
    c[i]=o[i];
    }
    }
    return c
    }
    var result = {name:'result'};
    result = deepCopy(china,result);
    console.dir(result)
  • 相关阅读:
    「学习记录」《数值分析》第三章计算实习题(Python语言)
    Set原理
    字符串流stringReader
    Collection List接口
    io
    Dubbo 服务容错Hystrix
    Duboo 与springboot整合
    读取配置文件
    springboot 端口号
    springboot 多环境选择
  • 原文地址:https://www.cnblogs.com/johnny-cli/p/7754204.html
Copyright © 2011-2022 走看看