手写new

用new Object() 的方式新建了一个对象 obj
取出第一个参数,就是我们要传入的构造函数。此外因为 shift 会修改原数组,所以 arguments 会被去除第一个参数
将 obj 的原型指向构造函数,这样 obj 就可以访问到构造函数原型中的属性
使用 apply,改变构造函数 this 的指向到新建的对象,这样 obj 就可以访问到构造函数中的属性
返回 obj

过程

在这里插入图片描述

实现

当未使用new创建对象时

this指向window
在这里插入图片描述
在这里插入图片描述

当使用new时

会传入构造函数和参数,传入的参数为伪数组,需要转为真数组
在这里插入图片描述
伪数组agrument调用Array原型上的slice方法,传入0是返回原真数组args([proson,“李四”,20])
在这里插入图片描述
返回的为第一个参数构造函数Person
在这里插入图片描述
使得空对象content的this指向contructor(即是Person),使得content可以使用Peroson里面的name和age属性,传入args参数
在这里插入图片描述
此时如果return content, 会发现content的_proto_指向有问题
在这里插入图片描述
使用原生的new时 _proto_指向就没有问题
在这里插入图片描述
所以
在这里插入图片描述
完整版
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值