javascript 深拷贝

来源:互联网 发布:php 参数传递 编辑:程序博客网 时间:2024/05/22 10:54

浅拷贝实例:


 <!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>




原创粉丝点击