改进版通过Json对象实现深复制的方法

  之前看到博客的关于Json对象的深复制方法,即

  

复制代码 代码如下:

  var obj = {

  sayName: function() {

  alert(this.name);

  },

  name:'静水渊'

  };var cloneObj=JSON.parse(JSON.stringify(obj));cloneObj.sayName();

  但这种方式,不能复制属性值是函数的属性,因此改进了方法,以下是具体代码:

  

复制代码 代码如下:

  var obj = {

  sayName: function() {

  alert(this.name);

  },

  name:'静水渊'

  };

  function clone(){

  var str,newObj;

  str= JSON.stringify(obj, function(key, value) {

  return (typeof value == 'function' ? value.toString().replace(/^function(.*)/g, "jsonFunction$1") : value);

  });

  newObj = JSON.parse(str, function (key, value) {

  if (/^jsonFunction(.*)/.test(value)) {

  var strFun = '('+value.replace(/^jsonFunction(.*)/, "function$1")+')';

  value = eval(strFun);

  }

  return value;

  });

  return newObj;

  }

  var cloneObj=clone(obj);

  cloneObj.sayName();

  因为还没有全面测试过,欢迎拍砖!