实现了深度复制对象,但是如何限制类型呢?
function isClass(o){
if(o === undefined){
return "Undefined";
}else {
return Object.prototype.toString.call(o).slice(8,-1);
}
}
function cloneObject(src){
var result,oClass = isClass(src);
if(oClass === "Object"){
result = {};
}else if (oClass === "Array") {
result = [];
}else{
return src;
}
for(key in src){
var copy = src[key];
if(isClass(copy) == "Object" || "Array"){
result[key]=arguments.callee(copy);
}else{
result[key]=src[key];
}
}
return result;
}
函数槽点比较多..两次判断类型造成资源浪费,而且
isClass(o) === "Object" || "Array"
这句很显然是大错特错的,太想当然了。另外arguments.callee
手册已经不推荐使用了,直接使用函数名会好一点。判断类型玩个curry化
isClass(copy) == "Object" || "Array" 这个错的有点严重啊