2019独角兽企业重金招聘Python工程师标准>>>

实现代码:

Object.prototype.clone = function() {var newObj = {};for (var i in this) {if (typeof(this[i]) == 'object' || typeof(this[i]) == 'function') {newObj[i] = this[i].clone();} else {newObj[i] = this[i];}}return newObj;
};Array.prototype.clone = function() {var newArray = [];var length = this.length;for (var i = length; i--;) {if (typeof(this[i]) == 'object' || typeof(this[i]) == 'function') {newArray[i] = this[i].clone();} else {newArray[i] = this[i];}}return newArray;
};Function.prototype.clone = function() {var that = this;var newFunc = function() {return that.apply(this, argunets);};for (var i in this) {newFunc[i] = this[i];}return newFunc;
};

测试代码以及运行结果:

var obj = {name: 'void',contents: ['node'],display: function() {console.log(this.name);},
};var newObj = obj.clone();
newObj.contents.push('test');
console.log(obj.contents);//输出 ['node']
console.log(newObj.contents);//输出 ['node', 'test']
console.log(newObj.display == obj.display);//输出 false

ps: 上述代码只是深拷贝的简单实现,当遇到两个互相引用的对象,会出现死循环的情况!

转载于:https://my.oschina.net/xing240/blog/178892

js对象深拷贝的简单实现相关推荐

  1. js复制html样式,js对象深拷贝的方法

    js 怎么把对象深拷贝到另一个对象 buy:function(buyList){buyList.forEach(function(good){good.farmer=this;});},buy是Far ...

  2. js 对象深拷贝、对象数组深拷贝的几种方法总结

    写前端的时候经常会遇到对象的拷贝,一般我们会用到深拷贝,深拷贝就是完完整整的将一个对象从内存中拷贝一份出来,放到另一块新开辟的内存中去.向下面这种赋值是浅拷贝,a.b都是对同一块内存进行引用,a.b哪 ...

  3. JS对象数组去重简单有效方法

    I.输入 JS对象数组去重是业务经常遇到的方法,稍微简洁一点的方法,如下: var data = [{"id": 1, "name": "李四1&qu ...

  4. js 对象深拷贝_这一次,彻底理解JavaScript深拷贝

    导语 这一次,通过本文彻底理解JavaScript深拷贝! 阅读本文前可以先思考三个问题: JS世界里,数据是如何存储的? 深拷贝和浅拷贝的区别是什么? 如何写出一个真正合格的深拷贝? 本文会一步步解 ...

  5. 3种方法实现JS对象深拷贝

    相信大家总是在各大博客中看到手写深拷贝这类题目,今天就分享3种方法实现它. 什么是深拷贝? let a = { name: 'jiaqi', age: 100 }; let b = a; 我们知道对象 ...

  6. js对象深拷贝(深克隆)

    我们首先看下面的例子: var userInfo = {username:"zhangsan",age:20}var copyUserInfo = userInfo;userInf ...

  7. js对象深拷贝的实现

    如何区分深浅拷贝?当B复制了A后,B的值发生了改变,A也会对应的发生变化.如果B复制了A后,B的值或者A的值发生变化,都互不影响,A和B是两个独立的对象,那么就是深拷贝. 浅拷贝 浅拷贝利用for i ...

  8. js 对象深拷贝递归实现

    const obj = {name:'changjk',family:{father:'zs',mother:'shh'},hobby:['打游戏','喝茶','打羽毛球']} //深拷贝 const ...

  9. js 对象深拷贝 合并对象

    deepMerge(...objs) {const result = Object.create(null)objs.forEach(obj => {if (obj) {Object.keys( ...

  10. 一篇文章彻底说清JS的深拷贝/浅拷贝

    一篇文章彻底说清JS的深拷贝and浅拷贝 这篇文章的受众 第一类,业务需要,急需知道如何深拷贝JS对象的开发者. 第二类,希望扎实JS基础,将来好去面试官前秀操作的好学者. 写给第一类读者 你只需要一 ...

最新文章

  1. sql中like带参数的写法
  2. IQueryable和IQueryProvider初尝
  3. Apache2月9日邮件:Tomcat请求漏洞(Request Smuggling)
  4. 有图有真相:带你实现当下流行的权限验证
  5. android面试题2019中高级,2019Android 最新面试题 持续更新
  6. ExtJs之combobox详解
  7. What are the best IDEs for the Go programming language?
  8. 前端直接访问登录页面报错_如何实现登录、URL和页面按钮的访问控制
  9. Petrozavodsk Winter-2018. Carnegie Mellon U Contest
  10. 自动驾驶路径规划算法学习-RRT算法及matlab实现
  11. OpenCms显示默认作者
  12. SpringBoot2.0系列教程(四)Springboot框架自定义消息转换器
  13. python中sticky_vue-sticky组件详解
  14. 竞争压力下,运营商终于开打价格战了,中国移动提供超低价套餐
  15. 四川农业大学计算机科学技术专业,四川农业大学计算机系简介
  16. Java线上诊断工具:Arthas简单快速学习
  17. 微信小程序点赞+取消点赞多项点击
  18. 爬虫爬取音乐url大全
  19. Javascript设置滚动条向上滚动的方法;JS设置滚动条滚动的代码
  20. 实现isPrime()函数,参数为整数,要有异常处理。如果整数是质数,返回True,否则返回Flase。

热门文章

  1. android 动态 添加删除 控件 图片
  2. Linux C++开发小结
  3. asp.net如何取得客户端控件的值
  4. 危险无处不在 Html标签带来的安全隐患
  5. SQL server 2008配置与用户名登录
  6. 全文检索lucene6.1的检索方式
  7. [转][Err] 1452 - Cannot add or update a child row: a foreign key constraint fail
  8. MYSQL 用户的操作
  9. Hexo + coding 博客的搭建和优化
  10. Silverlight提示“Load 操作失败。远程服务器返回了错误: NotFound”