function deepClone(obj){
  var newObj= obj instanceof Array?[]:{};
  for(var i in obj){
     newObj[i]=typeof obj[i]=='object'?
     deepClone(obj[i]):obj[i];
  }
  return newObj;
}

这种方法可以实现一般对象和数组对象的克隆,比如:

var arr=[1,2,3];
var newArr=deepClone(arr);
// newArr->[1,2,3]

var obj={
x:1,
y:2
}
var newObj=deepClone(obj);
// newObj={x:1,y:2}

 

对于正则对象RegExp

RegExp.prototype.clone = function() {
  var pattern = this.valueOf();
  var flags = '';
  flags += pattern.global ? 'g' : '';
  flags += pattern.ignoreCase ? 'i' : '';
  flags += pattern.multiline ? 'm' : '';
  return new RegExp(pattern.source, flags);
};

var reg=new RegExp('/111/');
var newReg=reg.clone();
//newReg-> /\/111\//

对于Date类型:

因为valueOf方法,日期类定义的valueOf()方法会返回它的一个内部表示:1970年1月1日以来的毫秒数.因此我们可以在Date的原型上定义克隆的方法:

Date.prototype.clone=function(){
  return new Date(this.valueOf());
}

var date=new Date('2010');
var newDate=date.clone();
// newDate-> Fri Jan 01 2010 08:00:00 GMT+0800

 

相关文章:

  • 2018-09-18
  • 2022-12-23
  • 2022-12-23
  • 2021-11-28
  • 2021-12-14
  • 2021-12-23
  • 2021-10-13
  • 2021-12-30
猜你喜欢
  • 2021-11-10
  • 2021-05-18
  • 2022-12-23
  • 2021-06-29
  • 2022-01-25
  • 2022-02-23
相关资源
相似解决方案