new 操作符在执行的时候做了些什么

new 操作符在执行的时候做了些什么

new 操作符在 js 中一直就存在,当创建一个实例对象的时候就会想到 new ,经常开玩笑说程序员没有对象别急那就 new 一个出来

加下来我们就看看 new 操作符具体都做了些什么


1. 创建了一个空对象,作为要返回的实例对象

首先,new 操作符肯定返回了一个对象,而且这个对象是按照其构造函数要求的样子进行构造的

function Fn(name) {
    this.name = name
}
let obj = new Fn('zs')
console.log(obj)

在这里插入图片描述

2. 将空对象的原型 proto 指向构造函数的 prototype 属性

创建的空对象是 let obj = new Object() 或 let obj = {} ,该对象的原型 proto 是 Object,但是我们使用自定义的构造函数创建对象实例时会多一层自定义的原型,就是构造函数中的 prototype 属性对应的用于存放公有属性的对象。因此 new 操作符就改变了新创建的对象的原型链。

3. 以指定构造函数的 this 为新创建的对象的方式调用构造函数

我们在使用 new 操作符进行创建对象实例后,会发现该对象已经带有了自己的某些属性,那么这些自己的属性是哪里来的呢?

答案是在构造函数构造出来的,构造函数内部有一个 this 对象,并且会发现在构造函数内有为 this 对象赋值的一个情况,如 this.age = 18 等等,我们知道,函数中 this 在没有进行指定的情况下会默认是调用该函数的对象。但是 this 是可以指定的,使用函数的 call 或 apply 方式进行函数的调用可以指定函数内的 this ,因此,new 操作符在调用构造函数的时候,将构造函数的 this 指定为新创建的对象,那么构造函数内带有 this 的语句就是在构造该对象的属性。因此 new 操作符肯定以指定 this 的方式调用了构造函数。

4. 判断构造函数返回值类型返回对象

构造函数也是函数,当然可以有返回值,但 new 操作符在调用构造函数时,规定如果构造函数没有指定返回值或者返回值为值类型,new 就会返回新创建的对象,new Fn() 拿到的就是新创建的对象实例,但如果构造函数返回的是一个对象,那 new 就会返回构造函数返回的对象,而不是对象实例了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值