js源码学习之new关键字

本文深入探讨JavaScript中的new关键字,包括其如何创建实例对象、构造函数的理解、new关键字的执行过程,以及源码实现。同时解释了箭头函数不能作为构造函数的原因,因为它们不具有自己的this和prototype。
摘要由CSDN通过智能技术生成

1. new关键字

new关键字可以创建实例对象

2. 构造函数的理解

function extend(name,age){
   this.name = name;
   this.age = age;
}
  • 原本的构造函数是window对象的方法,如果不用new操作符而直接调用,那么构造函数的执行对象就 是window,即this指向了window
  • 当调用 extend('henry',25) 时,可以在window身上找到对应的 name 和 age
  • 现在用 new 操作符后,this 就指向了新生成的对象,可以在新生成的对象身上找到对应的 age 和 name

3. new关键字的执行过程

new 关键字内部干了如下三件事(已知构造函数为Func)

  1. 创建一个空对象,并使该空对象继承 Func.prototype
  2. 执行构造函数,并将this指向刚刚创建的新对象
  3. 返回新对象

可以看到在使用new关键字的时候改变了this指向,这也就是为什么使用new操作符后,对应的属性不再挂载到window身上,而是新的实例对象身上

4. new 关键字源码实现

根据 new 关键字的执行过程,我们可以简单实现出一个new关键字

export function _new(Fn, ...args) {
    
    // 1. 创建一个空对象
    const obj = {};
    
    // 2. 执行构造函数,并将 this 指向刚刚创建的对象
    co
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值