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)
  • 相关阅读:
    【[Offer收割]编程练习赛12 B】一面砖墙
    【[Offer收割]编程练习赛12 A】歌德巴赫猜想
    【codeforces 779E】Bitwise Formula
    Java Web整合开发(85)
    数字
    T2602 最短路径问题 codevs
    P3378 堆【模板】 洛谷
    T1013 求先序排列 codevs
    P1717 钓鱼 洛谷
    P2085 最小函数值 洛谷
  • 原文地址:https://www.cnblogs.com/johnny-cli/p/7754204.html
Copyright © 2011-2022 走看看