zoukankan      html  css  js  c++  java
  • javascript对象拷贝

    浅拷贝


    浅拷贝函数:

    function copy(p){
        var c = {};
        for (var i in p){
            c[i] = p[i];
        }
        c.uber = p;
        return c;
    }

    测试:

    var People = {
      nation:'中国'
    };
    People.birthPlaces = ['北京','上海','香港'];
    
    var Teacher = copy(People);
    Teacher.birthPlaces.push('厦门');
    console.log(Teacher.birthPlaces);
    console.log(People.birthPlaces);
    console.log(Teacher.nation);
    console.log(People.nation);

    结果:

    ["北京", "上海", "香港", "厦门"] 
    ["北京", "上海", "香港", "厦门"]  //People的birthPlaces变了
    中国
    中国 

    深拷贝


    深拷贝函数:

    //深拷贝(递归调用浅拷贝)
    function deepCopy(p, c) {
        var c = c || {};
        for (var i in p) {
          if (typeof p[i] === 'object') {
            c[i] = (p[i].constructor === Array) ? [] : {};
            deepCopy(p[i], c[i]);
          } else {
             c[i] = p[i];
          }
        }
        return c;
    }

    测试:

    var People = {
      nation:'中国'
    };
    People.birthPlaces = ['北京','上海','香港'];
    
    var Teacher = deepCopy(People);
    Teacher.birthPlaces.push('厦门');
    console.log(Teacher.birthPlaces);
    console.log(People.birthPlaces);
    console.log(Teacher.nation);
    console.log(People.nation);

    结果:

    ["北京", "上海", "香港", "厦门"] VM211:22
    ["北京", "上海", "香港"] VM211:23
    中国 VM211:24
    中国 

     参考:http://www.ruanyifeng.com/blog

  • 相关阅读:
    华为"128为大整数相加"机试题
    ORA-12545: 因目标主机或对象不存在, 连接失败
    VS2010 安装使用STLPort
    Debian 入门安装与配置1
    CF1072A Palindromic Twist 思维
    解决让刷新页面时不提示 "重试或取消”对话框
    php优化及高效提速问题小结
    让Tomcat支持php
    Php邮件发送源码
    使用iconv提示未知错误
  • 原文地址:https://www.cnblogs.com/wishyouhappy/p/3741222.html
Copyright © 2011-2022 走看看