javascript 深拷贝
2013-11-27 22:12
323 查看
浅拷贝实例:
<!doctype html> <html lang="en"> <head> <meta charset="gbk" /> <meta content="IE=8" http-equiv="X-UA-Compatible"/> <title>javascript 深拷贝</title> <script type="text/javascript"> var oOriginal = { memNum: 1, // number memStr: "I am a string", // string memObj: { test1: "Old value" // we’ll test }, memArr: [ // array "a string", // string member of array { // object member of array test2: "Try changing me" // we'll test } ] }; var extend = function(result, source) { for (var key in source) result[key] = source[key]; return result; } var oCopy = extend({},oOriginal); // 浅拷贝 oCopy.memObj.test1 = "New value"; // 出现问题了,会反射到原对象上 console.log(oOriginal.memObj.test1); // 结果副本与原本都一同被修改了 oCopy.memArr[1].test2 = "I am changed"; console.log(oOriginal.memArr[1].test2); // 同样中招了 </script> </head> <body> <h1>javascript 浅拷贝</h1> </body> </html>
深拷贝 实例
<!doctype html> <html lang="en"> <head> <meta charset="gbk" /> <meta content="IE=8" http-equiv="X-UA-Compatible"/> <title>javascript 深拷贝 </title> <script type="text/javascript"> var oOriginal = { memNum: 1, // number memStr: "I am a string", // string memObj: { test1: "Old value" // we’ll test }, memArr: [ // array "a string", // string member of array { // object member of array test2: "Try changing me" // we'll test } ] }; dom = {}; dom.is = function (obj,type) { return (Object.prototype.toString.call(obj).slice(8,-1)===type) }; dom.deepCopy = function(result, source){ for(var key in source){ var value = source[key]; if(value===source) continue; if(dom.is(value,"Object")){ result[key] = arguments.callee(result[key] || {},value); }else if(dom.is(value, "Array")){ result[key] = arguments.callee(result[key] || [],value) }else{ result[key] = value; } } return result; }; var oCopy = dom.deepCopy({},oOriginal); oCopy.memObj.test1 = "New value"; console.log(oOriginal.memObj.test1); oCopy.memArr[1].test2 = "I am changed"; console.log(oOriginal.memArr[1].test2); </script> </head> <body> <h1>javascript 深拷贝</h1> </body> </html>
相关文章推荐
- 拷贝网页内容增加版权信息的 JavaScript 代码示例
- JavaScript:浅拷贝和深拷贝
- 【javascript基础】之深度克隆(深度拷贝)一个对象
- javascript笔记:拷贝出腾讯微博关于London2012奥运会的拉绳开关的网页特效
- Javascript中的深拷贝和浅拷贝
- JavaScript 深浅拷贝
- JavaScript数组深拷贝和浅拷贝的两种方法
- 浅谈JavaScript之深浅拷贝(二)
- javascript中的深拷贝和浅拷贝
- 拷贝网页内容增加版权信息的 JavaScript 代码示例
- 用javascript拷贝保存页面控件内容
- JavaScript拷贝继承法的应用
- JavaScript实现深拷贝与浅拷贝
- JavaScript高级 面向对象(8)--浅拷贝代码实现
- Javascript浅拷贝与深拷贝实现
- javascript深拷贝和浅拷贝详解
- javaScript| 对象的拷贝
- JavaScript深度克隆(深度拷贝)一个对象
- javascript 拷贝节点cloneNode()使用介绍
- javascript 中对象的拷贝