代码
function deep() {
var length = arguments.length;
if (length <= ) {
if (length === ) {
return deep({}, arguments[]);
}
else if (length === ) {
deepCopy(arguments[],arguments[]);
}
else {
return {};
}
}
else {
for (var i = ; i < length; i++) {
deepCopy(arguments[],arguments[i]);
}
}
return arguments[];
function deepCopy(newObj,oldObj) {
for (var i in oldObj) {
if (typeof oldObj[i] === 'object') {
if (oldObj[i].constructor === Array) {
// 如果属性为数组的情况下
newObj[i] = [];
}
else if (oldObj[i] instanceof HTMLElement || oldObj[i] === window) {
// 如果属性为dom对象或者window对象的情况下
newObj[i] = oldObj[i];
}
else {
// 如果属性为纯粹对象的情况下
if(!newObj[i] || !(newObj[i] instanceof Object)) {
newObj[i] = {};
}
}
deepCopy(newObj[i],oldObj[i]);
}
else {
newObj[i] = oldObj[i];
}
}
return newObj;
}
}
使用方法
- deep(a,b) 返回扩展后的a对象,a对象有b对象的所有属性值
- deep({},a,b)返回一个新对象,新对象包括a对象和b对象的所有属性值,有相同属性时b对象的会覆盖a对象,后面的对象优先级高,可以传多个对象