对象混合
对象混合就是把多个对象混合为一个,如果有相同的属性,后面的会覆盖前面的
//混合这里比较简单的,首先我们自己来写一个对象混合函数
function mixin(...params) {
let newObj = {};
params.reverse().forEach((ele, index) => {
for (let prop in ele) {
if (!newObj[prop]) {
newObj[prop] = ele[prop];
}
}
});
return newObj;
}
//实际上js也提供了混合函数,
let obj1 = {a:'1'};
let obj2 = {b:'2'};
let res = Object.assign(obj1,obj2);
//这样也可以得到混合的结果,但是这样会有一个缺陷,就是会改变obj1的值
let res = Object.assign({},obj1,obj2);//所以使用这样的方式更佳
对象克隆
首先克隆这里会有浅克隆与深度克隆
- 浅克隆比较简单,直接复制地址就好
- 深度克隆的话,就需要遍历每个属性,重新复制了
来看一下代码的逻辑
| 类型 | 方式 |
|---|---|
| 原始类型,函数 | 直接赋值 |
| 对象类型,数组类型 | 通过递归逐个遍历,进行赋值 |
/**
* 对象克隆
* @param {*} params 传递的参数
* @param {*} deep 是否进行深度克隆
*/
function clone(params, deep) {
if (Array.isArray(params)) {
// 处理数组
let newArr = [];
if (deep) {
for (let prop of params) {
newArr.push(clone(prop, deep));
}
return newArr;
} else return params;
} else if (typeof params == "object") {
//处理对象
if (params == null) return params;
let newObj = {};
if (deep) {
for (let prop in params) {
newObj[prop] = clone(params[prop], deep);
}
return newObj;
} else return params;
} else {
//处理函数与原始类型
return params;
}
}