JS对象的数据类型分为两大类:原始类型(string, boolean, number,undefined, function)和 对象类型(array, object, null)。

1、浅度克隆

浅度克隆原始类型为值传递,对象类型为引用传递(即修改数组或对象值会同时修改另一个数组或对象相应的值)

function clone(origin, target) {var target = target || {};for (var key in origin) {target[key] = origin[key];}return target;
}

2、深度克隆

所有数据类型均为复制,两个对象完全独立,修改其中一个对象值不会影响另一个。

function deepClone(origin, target) {var target = target || {}; // 目标对象toStr = Object.prototype.toString, // 简化toString方法isArr = '[object Array]'; // toString方法返回的数组类型for (var key in origin) { // 遍历原对象if (origin.hasOwnProperty(key)) { //判断是否是自身属性if (typeof(origin[key]) == 'object' && origin[key] !== null) { // 是引用类型且不是nullif (toStr.call(origin[key]) == isArr) { // 判断是否是数组target[key] = []; // 数组} else { target[key] = {}; // 对象
                }deepClone(origin[key], target[key]); // 递归} else {target[key] = origin[key]; // 原始值或null
            }}}return target;
}

转载于:https://www.cnblogs.com/splendid/p/10263408.html

回顾JavsScript对象的克隆相关推荐

  1. js实现对象完美克隆

    我们知道,在js中,当object作为参数传递到函数中进行处理后,实际上是修改了传入的对象本身(或者说是对象的引用),但很多时候我们并不希望函数去修改我们的这些对象参数,这就需要使用到对象的克隆,我们 ...

  2. php怎么克隆,利用php怎么对对象进行克隆

    利用php怎么对对象进行克隆 发布时间:2021-02-09 10:34:18 来源:亿速云 阅读:75 作者:Leah 本篇文章给大家分享的是有关利用php怎么对对象进行克隆,小编觉得挺实用的,因此 ...

  3. 【JAVA零基础入门系列】Day14 Java对象的克隆

    [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day ...

  4. 对象的克隆——原型模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/7424559 张纪中版<西游记>以出乎意料的造型和雷人的台词遭到广大观众朋友的热 ...

  5. JAVA复习(对象的克隆、正则表达式)

    对象的克隆 对象的克隆就是复制的操作,和之前学习的引用传递不同 在引用传递中一个 实例 可以有多个名字 但是多个名字都指向一个对象 克隆出来的对象 和之前的对象 没有任何的引用关系 想要实现对象的克隆 ...

  6. 返回对应对象的克隆方法

    代码 using System; using System.Collections.Generic; using System.Text; using System.Collections; usin ...

  7. java浅度克隆_java对象 深度克隆(不实现Cloneable接口)和浅度克隆

    为什么需要克隆: 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说 ...

  8. Javascript中的对象拷贝(对象复制/克隆)

    Javascript中的对象拷贝(对象复制/克隆) 李俊才 CSDN:jcLee95 邮箱:291148484@163.com 1. 对象的引用 要说"拷贝"还要先说"引 ...

  9. JS篇之数组、对象的克隆

    1. 数组的克隆 一. 普通一维数组深克隆let arr = [1,2,3](1) for循环遍历数组pushlet arr1 = []for( let i of arr ){arr1.push(i) ...

最新文章

  1. 玩转Windows 7
  2. boost智能指针之shared_ptr,scoped_ptr,intrusive_ptr,weak_ptr源码简析
  3. Win7系统中Microsoft Office Word2003已停止工作
  4. CodeForces - 1092F Tree with Maximum Cost(树形dp+树根转移)
  5. Spring常见面试题
  6. 《LoadRunner 12七天速成宝典》—第2章2.6节第二个性能测试案例
  7. Apache Flink 结合 Kafka 构建端到端的 Exactly-Once 处理
  8. iPhone 12s Pro渲染图曝光:屏幕和相机将成升级重点
  9. winform DataGridView的虚模式填充,CellValueNeeded事件的触发条件
  10. 腾达无线路由器如何开启无线中继功能
  11. Bus Hound实用教程
  12. 技术总监岗位职责和要求
  13. JavaScript 实现延迟合并处理任务
  14. 杨忠愍斗严嵩,为国为民,名垂千古
  15. 程序员做外包,真的没地位没出路吗?
  16. 数字信号处理基础----采样定理
  17. Archlinux arm的国内镜像源(for Banana Pi / Raspberry Pi , etc)
  18. 开源为什么是“白色”的?
  19. js判断身份证号码是否正确
  20. java地铁最短距离_地铁线路最短路径问题

热门文章

  1. dosbox edit.exe 如何使用_微软软件如何激活?这个神器分享给你!
  2. Codeforces Round #710 (Div. 3)
  3. java hashcode相等_关于java:hashCode实现,用于“等于某些字段相等”
  4. tcp socket编程 java_JAVA TCP Socket编程 计算题
  5. git与github远程连接代码库使用笔记
  6. 机器学习︱非平衡数据处理方式与评估
  7. 01-HTML基础与进阶-day4-录像250
  8. (17/24) webpack实战技巧:生产环境和开发环境并行设置,实现来回切换
  9. Kubernetes应用跨可用区实战
  10. 一行命令获取当前JVM所有可设置的参数以及当前默认值