19、Object.assign
作用:
Object.assign的作用是将源对象的所有可枚举属性复制到目标对象中。它返回目标对象。
const obj1 = { a: 1, b: 2 };const obj2 = { b: 3, c: 4 };const obj3 = { d: 5 };const target = {};Object.assign(target, obj1, obj2, obj3);console.log(target); // { a: 1, b: 3, c: 4, d: 5 }
我的手写代码:
// 手写:输入多个参数...参数,对参数进行遍历,保存再目标对象中function myAssign(target , ...args){// 1、对target进行判断if(target === null || target === undefied){return new TypeError('target不能为null或者undefied');}// 2、确保target是一个对象target === typeof target === 'object' ? target : Object(target);// 3、循环args// console.log(args);args.forEach((item) => {// 4、遍历item的每个属性for(let key in item){if(item.hasOwnProperty(key)){target[key] = item[key];}}})// 5、返回targetreturn target}
测试结果:
console.log(myAssign(target, obj1, obj2, obj3)); // { a: 1, b: 3, c: 4, d: 5 }
总结:
因为之前做的浅拷贝有这个函数,写的时候觉得和浅拷贝差不多,最开始没有对target继续宁类型判断只有7分,后面就添加了一个判断。总的思路其实就是遍历传来的参数,遍历参数的属性,添加属性到目标数组就可以了。
注意,item不是可迭代对象,在遍历它的属性的时候要使用for…in