深入理解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 相关文章推荐
js兼容标准的表格变色效果
Jun 28 Javascript
JQuery jsonp 使用示例代码
Aug 12 Javascript
javascript 类定义的4种方法
Sep 12 Javascript
这些年、我收集的JQuery代码小结
Aug 01 Javascript
window.open关于浏览器拦截问题分析及解决方法
Feb 05 Javascript
js实现在字符串中提取数字
Nov 05 Javascript
JavaScript中的对象的extensible属性介绍
Dec 30 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
Aug 24 Javascript
iframe高度自适应及隐藏滚动条的实例详解
Sep 29 Javascript
JS 中document.write()的用法和清空的原因浅析
Dec 04 Javascript
js经验分享 JavaScript反调试技巧
Mar 10 Javascript
解决layer.confirm选择完之后消息框不消失的问题
Sep 16 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.MVC的模板标签系统(二)
2006/09/05 PHP
递归列出所有文件和目录
2006/10/09 PHP
php防攻击代码升级版
2010/12/29 PHP
yii框架无限极分类的实现方法
2017/04/08 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
2019/01/23 PHP
php实现的顺序线性表示例
2019/05/04 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
HTML 自动伸缩的表格Table js实现
2009/04/01 Javascript
var与Javascript变量隐式声明
2009/09/17 Javascript
Javascript学习笔记6 prototype的提出
2010/01/11 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
2014/04/22 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
2014/09/13 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
微信小程序中的swiper组件详解
2017/04/14 Javascript
vue开发调试神器vue-devtools使用详解
2017/07/13 Javascript
Angular 5.x 学习笔记之Router(路由)应用
2018/04/08 Javascript
你可能不知道的CORS跨域资源共享
2019/03/13 Javascript
Python中列表元素转为数字的方法分析
2016/06/14 Python
Python常用算法学习基础教程
2017/04/13 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
python、java等哪一门编程语言适合人工智能?
2017/11/13 Python
Python多层装饰器用法实例分析
2018/02/09 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
Django使用模板后无法找到静态资源文件问题解决
2019/07/19 Python
Django中使用haystack+whoosh实现搜索功能
2019/10/08 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
美国网上鞋城:Shoeline.com
2016/11/17 全球购物
教师党员公开承诺书
2014/03/25 职场文书
社区优秀志愿者先进事迹
2014/05/09 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL
Python爬虫之爬取二手房信息
2021/04/27 Python
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android