實現物件深拷貝的簡單案例
阿新 • • 發佈:2018-12-19
程式碼
function deep() {
var length = arguments.length;
if (length <= 2) {
if (length === 1) {
return deep({}, arguments[0]);
}
else if (length === 2) {
deepCopy(arguments[0],arguments[1]);
}
else {
return {};
}
}
else {
for (var i = 1; i < length; i++) {
deepCopy(arguments[0],arguments[i]);
}
}
return arguments[0];
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物件,後面的物件優先順序高,可以傳多個物件