深入理解JavaScript中的对象复制(Object Clone)


Posted in Javascript onMay 18, 2016

JavaScript中并没有直接提供对象复制(Object Clone)的方法。因此下面的代码中改变对象b的时候,也就改变了对象a。

a = {k1:1, k2:2, k3:3};

b = a;

b.k2 = 4;

如果只想改变b而保持a不变,就需要对对象a进行复制。

用jQuery进行对象复制

在可以使用jQuery的情况下,jQuery自带的extend方法可以用来实现对象的复制。

a = {k1:1, k2:2, k3:3};

b = {};

$.extend(b,a);

自定义clone()方法来实现对象复制

下面的方法,是对象复制的基本想法。

Object.prototype.clone = function() {
 var copy = (this instanceof Array) ? [] : {};
 for (attr in this) {
  if (!obj.hasOwnProperty(attr)) continue;
  copy[attr] = (typeof this[i] == "object")?obj[attr].clone():obj[attr];
 } 
 return copy;
};


a = {k1:1, k2:2, k3:3};
b = a.clone();

下面的例子则考虑的更全面些,适用于大部分对象的深度复制(Deep Copy)。

function clone(obj) {
  // Handle the 3 simple types, and null or undefined
  if (null == obj || "object" != typeof obj) return obj;

  // Handle Date
  if (obj instanceof Date) {
    var copy = new Date();
    copy.setTime(obj.getTime());
    return copy;
  }

  // Handle Array
  if (obj instanceof Array) {
    var copy = [];
    for (var i = 0, var len = obj.length; i < len; ++i) {
      copy[i] = clone(obj[i]);
    }
    return copy;
  }

  // Handle Object
  if (obj instanceof Object) {
    var copy = {};
    for (var attr in obj) {
      if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]);
    }
    return copy;
  }

  throw new Error("Unable to copy obj! Its type isn't supported.");
}

以上这篇深入理解JavaScript中的对象复制(Object Clone)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 定义function的三种方式小结
Oct 16 Javascript
javascript 用记忆函数快速计算递归函数
Mar 15 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
Dec 14 Javascript
javascript单引号和双引号的区别和处理
May 14 Javascript
JS简单实现动画弹出层效果
May 05 Javascript
JavaScript、jQuery与Ajax的关系
Jan 24 Javascript
AngularJs表单验证实例详解
May 30 Javascript
Bootstrap响应式表格详解
May 23 Javascript
angular过滤器实现排序功能
Jun 27 Javascript
解决angularjs中同步执行http请求的方法
Aug 13 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
Mar 20 jQuery
Echarts.js无法引入问题解决方案
Oct 30 Javascript
js验证框架实现代码分享
May 18 #Javascript
在JavaScript中对HTML进行反转义详解
May 18 #Javascript
深入理解JavaScript中的浮点数
May 18 #Javascript
Node.js返回JSONP详解
May 18 #Javascript
noty ? jQuery通知插件全面解析
May 18 #Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
May 18 #Javascript
jQuery实现图片向左向右切换效果的简单实例
May 18 #Javascript
You might like
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
Extjs 3.3切换tab隐藏相应工具栏出现空白解决
2013/04/02 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
javascript中的if语句使用介绍
2013/11/20 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
谈谈JavaScript自定义回调函数
2015/10/18 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
用jquery快速解决IE输入框不能输入的问题
2016/10/04 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
深入解读VUE中的异步渲染的实现
2020/06/19 Javascript
Vue作用域插槽实现方法及作用详解
2020/07/08 Javascript
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
Python访问MySQL封装的常用类实例
2014/11/11 Python
Python 功能和特点(新手必学)
2015/12/30 Python
python爬取淘宝商品详情页数据
2018/02/23 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
python 实现倒排索引的方法
2018/12/25 Python
python实现矩阵打印
2019/03/02 Python
python实现简单图片物体标注工具
2019/03/18 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
HTML5 Blob对象的具体使用
2020/05/22 HTML / CSS
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
澳大利亚家具和家居用品购物网站:Zanui
2018/12/29 全球购物
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
公务员转正考察材料
2014/02/07 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
CSS中em的正确打开方式详解
2021/04/08 HTML / CSS
Python基本的内置数据类型及使用方法
2022/04/13 Python