JavaScript构造函数new与不new的区别

1、首先,对于构造函数来说,使用new关键字来实例化对象的时候,后续的过程基本都是一样的,即:
(1)创建一个空的简单 JavaScript 对象
(2)为步骤 1 新创建的对象添加属性**proto,将该属性链接至构造函数的原型对象
(3)将步骤 1 新创建的对象作为
this的上下文
(4)如果该函数没有返回对象,则返回
this**
2、其次,对于js内置的一些构造函数,例如Array、Object等,如果没有加new操作符,因为其内部有判断,会判断当前的this指向以及其原型,这个时候内部就会根据判断结果来决定是否加上new关键字。
3、普通的构造函数就不一样了,如果我们没有写相应的判断语句,那么当我们不加new关键字的时候,此时this指向的是globalthis全局对象,这个时候函数体内部返回什么,得到的实例化对象就是什么,当然我们也可以手动加上相应的语句,例如:
在这里插入图片描述
此时p1就是返回的name
在这里插入图片描述
当我们加上判断语句:
在这里插入图片描述此时p1就是Person的实例化对象
此时p1就是Person的实例化对象
4、需要注意的是,Symbol、BigInt是不能够使用new关键字来实例化的,因为它们都不是构造函数
在这里插入图片描述

为什么要这样做呢?这样做是为了避免创建 Symbol 原始值包装对象,在引用类型中,有三种原始值包装类型:String、Number、Boolean。原始值类型 “abc”、123 不是对象,原始值包装类型 是用来把原始值包装成对象的引用类型。例如:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值