Object.assign()的简单实现

一、Object.assign() 介绍

1.定义:

Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象。        ——MDN

2.语法

Object.assign(target, ...sources)

target:目标对象

sources:源对象,可以任意多个

返回值:一定是对象

二、原理及实现

1.分析特点:

(1)第一个参数不能是null或undefined(不太清楚为什么)

(2)返回值一定是对象,所以不管传入的第一个参数是什么类型(除null或undefined),都用Object()转化成对象

(3)因为可以传多个对象参数,则遍历对目标对象赋值即可。

2.代码:

function myAssign(target, ...sources) {
    // 第一个参数不能是null或undefined
    if (target === undefined || target === null) {
      throw new TypeError('cannot convert first argument to object');
    }
    // 返回的一定是对象
    let res = Object(target);
    for (let i = 0; i < sources.length; i++) {
      let obj = sources[i];
      if (obj !== null && obj !== undefined) {
        for (let k in obj) {
          if (Object.prototype.hasOwnProperty.call(sources[i], k)) {
            res[k] = obj[k];
          }
        }
      }
    }
    return res;
}

总结:

自己写了一遍之后就知道为什么第一层的属性是深拷贝,对象中的对象就都是浅拷贝了。

其实只是把对象中的属性拿出了赋值给目标对象,但并没有对对象的对象进行遍历赋值处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值