拷贝有深浅之分。
浅拷贝比较easy
function extend2(target, ref){
var name, value;
for(name in ref){
value = ref[name];
if(value !== undefined){
target[name] = value;
}
}
return target;
}
深拷贝需要对Array和plainObject
function extend(deep, target, ref){
var name, value, src, copy, clone, copyIsArray;
for(name in ref){
src = target[name];
copy = ref[name];
if(target === copy){
continue;
}
if(deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))){
if(copyIsArray){
clone = src && isArray(src) ? src : [];
}else{
clone = src && isPlainObject(src) ? src : {};
}
target[name] = extend(deep,clone,copy);
}else{
target[name] = copy;
}
}
return target;
}
这里类型判断参考上一篇。