实现了深度复制对象,但是如何限制类型呢?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;}
2 回答
Qyouu
TA贡献1786条经验 获得超11个赞
函数槽点比较多..两次判断类型造成资源浪费,而且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;}
添加回答
举报
0/150
提交
取消