猿问

深度复制对象。被复制的对象类型会被限制为数字、字符串、布尔、日期、数组、Object对象。不会包含函数、正则对象等

实现了深度复制对象,但是如何限制类型呢?
functionisClass(o){
if(o===undefined){
return"Undefined";
}else{
returnObject.prototype.toString.call(o).slice(8,-1);
}
}
functioncloneObject(src){
varresult,oClass=isClass(src);
if(oClass==="Object"){
result={};
}elseif(oClass==="Array"){
result=[];
}else{
returnsrc;
}
for(keyinsrc){
varcopy=src[key];
if(isClass(copy)=="Object"||"Array"){
result[key]=arguments.callee(copy);
}else{
result[key]=src[key];
}
}
returnresult;
}
慕尼黑8549860
浏览 297回答 2
2回答

Qyouu

函数槽点比较多..两次判断类型造成资源浪费,而且isClass(o)==="Object"||"Array"这句很显然是大错特错的,太想当然了。另外arguments.callee手册已经不推荐使用了,直接使用函数名会好一点。functioncloneObject(src){varresult;switch(isClass(src)){case"Array":result=[];break;case"Object":result={};break;/**如果是要过滤掉Function和RegExp的话**/case"RegExp":case"Function":returnnull;break;/**结束**/default:returnsrc;break;}for(keyinsrc){varcopy=cloneObject(src[key]);if(copy!=null)result[key]=copy;}returnresult;}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答