Object.assign 实现原理

Object.assign

方法说明

Object.assign()用于将对象自身所有的可枚举属性从一个或者多个源对象上复制到目标对象

源码的关键点在于

该方法的原理比较简单,实现的关键点在于理解 ”方法说明“ 中的内容,对照下面的源码内容和注释,即可理解和实现

源码

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"}
发布了14 篇原创文章 · 获赞 0 · 访问量 378
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览