回顾JavsScript对象的克隆

时间:2022-01-18 21:01:45

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) { // 是引用类型且不是null
if (toStr.call(origin[key]) == isArr) { // 判断是否是数组
target[key] = []; // 数组
} else {
target[key] = {}; // 对象
}
deepClone(origin[key], target[key]); // 递归
} else {
target[key] = origin[key]; // 原始值或null
}
}
}
return target;
}

回顾JavsScript对象的克隆的更多相关文章

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

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt128 为什么需要克隆: 在实际编程过程中,我们常常要遇到这种情况:有一个对象 ...

  2. Java基础学习 —— 对象的克隆

    对象的克隆分为对象的浅克隆和深克隆 一.对象的浅克隆 注意事项: 1.如果一个对象需要调用clone的方法克隆,那么该对象必须要实现Cloneable接口 2.Cloneable对象只是一个标识对象, ...

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

    今天要介绍一个概念,对象的克隆.本篇有一定难度,请先做好心理准备.看不懂的话可以多看两遍,还是不懂的话,可以在下方留言,我会看情况进行修改和补充. 克隆,自然就是将对象重新复制一份,那为什么要用克隆呢 ...

  4. Java对象的克隆和深浅问题

    Java实现克隆的方式 Java实现克隆的方式有如下两种, 推荐采用实现Cloneable接口的方式 实现Cloneable接口, 重写clone方法, 调用父类的clone方法 还有另一种方法, 不 ...

  5. java基础知识总结--对象的克隆

    前提:在Java语言中所有的类的都是缺省的继承Java语言中的Object类的, protected native Object clone() throws CloneNotSupportedExc ...

  6. Java基础--对象的克隆

    文章转载自https://www.cnblogs.com/Qian123/p/5710533.html 阅读目录 为什么要克隆? 如何实现克隆 浅克隆和深克隆 解决多层克隆问题 总结 假如说你想复制一 ...

  7. Java对象的克隆

    今天要介绍一个概念,对象的克隆.本篇有一定难度,请先做好心理准备.看不懂的话可以多看两遍,还是不懂的话,可以在下方留言,我会看情况进行修改和补充. 克隆,自然就是将对象重新复制一份,那为什么要用克隆呢 ...

  8. net对象的克隆

    class Person { public string name; public List<string> hobby; } void main() { Person p1 = new ...

  9. 设计模式系列之原型模式&lpar;Prototype Pattern&rpar;——对象的克隆

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

随机推荐

  1. VB6中的引用传递 与 VB&period;NET中的引用传递的区别

    首先注意一点,在VB6中缺省参数传递的方式是:引用传递,而在VB.NET中缺省参数传递的方式是:值传递. 然后我们看下面VB6中的引用传递与VB.NET中的引用传递的对比. VB6中的引用传递 Pri ...

  2. HDU 1025 Constructing Roads In JGShining&&num;39&semi;s Kingdom(求最长上升子序列nlogn算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1025 解题报告:先把输入按照r从小到大的顺序排个序,然后就转化成了求p的最长上升子序列问题了,当然按p ...

  3. vim基本使用

    i 进入插入状态 esc 退出插入状态 x 删除一个字符 dd 删除一行,并拷贝 yy 拷贝 p 粘贴 u 撤销 ctrl+r 重做 :w 保存 :q 退出 :q! → 退出不保存

  4. Microsoft Azure云计算第一步—试用帐户申请

    从本文开始,将会对Microsoft Azure云从Iaas, Paas, Saas三种类型的云应用通过文章进行介绍.千里之行,始于帐户:),如果大家需要申请免费试用帐户请参考本文. 对于直接付钱的壕 ...

  5. &lbrack;POJ 3734&rsqb; Blocks &lpar;矩阵高速幂、组合数学)

    Blocks Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3997   Accepted: 1775 Descriptio ...

  6. Strongly connected&lpar;hdu4635(强连通分量)&rpar;

    /* http://acm.hdu.edu.cn/showproblem.php?pid=4635 Strongly connected Time Limit: 2000/1000 MS (Java/ ...

  7. apicloud教程2 (转载)

    本帖最后由 中山赢友网络科技有限公司 于 2015-10-17 15:38 编辑 继<APICloud之小白图解教程系列(一):认识APICloud>之后的第二篇教程. 本篇教程有以下知识 ...

  8. android:layout&lowbar;gravity和gravity的区别

    文章转自http://blog.csdn.net/shakespeare001/article/details/784346,给出了很详细的解释. 1.首先来看看Android:layout_grav ...

  9. WSL优化 &lpar;Windows Subsystem for Linux&rpar; Linux子系统优化配置

    目录 wsl优化 (Windows Subsystem for Linux) Linux子系统优化 1. 永久修改wsl终端字体 2. 修改Linux终端配色 3. 添加WSL到右键菜单 wsl优化 ...

  10. URAL 1989 Subpalindromes &lpar;多项式hash&rpar; &plus;【线段树】

    <题目链接> <转载于 >>>  > 题目大意:给你一段字符串,进行两种操作:1.询问[l,r]这个区间中的字符串是否是回文串: 2.更改该字符串中对应下标的 ...