为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑8549860 2019-04-19 15:59:10
实现了深度复制对象,但是如何限制类型呢?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;
}
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 296 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信