js 运算符_js——实现new运算符

实现new运算符

要实现new我们首先得知道在使用new关键词时它做了什么

ec487452b92842cca0c02137241208cb.png

// 实例化对象Tom种类是猫

Tom = new Animal("Tom", "Cat");

console.log(Tom);

输出的结果为:

1b7e654b8c892b64d18b81a616ef5756.png

这样看简单明了,new在实例化时做了这几件事情

1、创建一个空对象,且让该对象继承了Function.prototype;

2、执行我们的构造函数,改变this指向(指向刚刚创建的新对象);

3、抛出我们的新对象;

那么既然知道了new的内部运行原理后,我们就可以模拟出一个_new函数

1605581dc6caaaa1883a80f29db86237.png

输出的结果为:

2f5bc3fcf201825cd72098af2b08cbbd.png

大功告成,但是中间较为难理解的一般是[].shift.call(arguments)这也是面试时常问到的。

[].shift.call(arguments)

首先我们这么写是为了完成 arguments 类数组转为数组。shift 内部实现是使用的this代表调用对象。那么当[].shift.call() 传入 arguments对象的时候,通过 call函数改变原来 shift 方法的 this 指向, 使其指向了arguments,并对arguments进行复制操作。也就是说,[].shift.call( arguments ) 通过shift() 方法删除数组第一项也就是我们的Animal函数并拿到Animal函数返回给我们的Function。

5274dafd2e191cd1050a8d112fcdf2ba.png

54fcea81ee638fa10aa7ea3dc95a26f9.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值