代碼
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對象,後面的對象優先級高,可以傳多個對象