手撕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
}


typescript版本:

function objectAssign(//把目标对象合并到原对象
  origin: Record<string, any>,//record为ts的高级类型,
  target: Record<string, any>
) {
  const originKeys = Object.keys(origin)//获取对象的键,返回一个数组
  const targetKeys = Object.keys(target)
  // 找到新增的属性则更新
  targetKeys.map((key) => {
     if(target[key]===null ||===undefined) continue;
     origin[key] = target[key]
  })

  return origin
}

阅读剩余
THE END