方法说明javascript
Object.assign()
用于将对象自身全部的可枚举属性从一个或者多个源对象上复制到目标对象
源码的关键点在于java
该方法的原理比较简单,实现的关键点在于理解 ”方法说明“ 中的内容,对照下面的源码内容和注释,便可理解和实现
源码函数
Object.myAssign = function (target, ...src) { for (let i = 0; i < src.length; i++) { if (src[i] !== null || src[i] !== undefined) { // 过滤掉源对象为null和undefined的状况 for (let key in src[i]) { // in运算符会查找原型对象上的可枚举属性,因此须要经过Object.prototype.hasOwnProperty方法过滤掉对象原型对象上的属性 if (src[i].hasOwnProperty(key)) { target[key] = src[i][key] } } } } return target } // 示例代码 const proto = { p: 'proto' } const obj1 = { a: 'aa' } const obj2 = { b: 'bb' } // 以proto对象为新对象的__proto__ const obj3 = Object.create(proto, { c: { value: 'cc', enumerable: true } }) console.log(obj3) // {c: 'cc'} // 输出obj3的构造函数的原型对象 console.log(obj3.__proto__) // {p: 'proto'} const t1 = Object.myAssign({}, obj1, obj2) console.log(t1) // {a: "aa", b: "bb"} const t2 = Object.myAssign({}, obj1, null, obj2, undefined) console.log(t2) // {a: "aa", b: "bb"} const t3 = Object.myAssign({}, obj1, obj2, obj3) console.log(t3) // {a: "aa", b: "bb", c: "cc"}