一般对象和数组对象的克隆

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

 

posted @ 2019-07-07 19:30  追梦的老头  阅读(358)  评论(0)    收藏  举报