js中new关键字究竟做了什么呢

要像真正弄懂new关键字做了什么?首先我们先要清楚构造函数,创建构造函数一般有三种方式,这里我们给出最常用的方式。

function Person(name,age){
    this.name=name
    this.age = age
}
let zhangsan = new Person('zhangsan',18)
let lisi = new Person('lisi',19)

该构造函数中没有给出返回值,那么他默认返回的是新创建的值。

new关键字在创建实例对象时,主要经历了下面4个过程:

(1)首先创建一个空对象

let obj = {}

(2)实例对象obj的隐式原型要与Person构造函数的显式原型指向相同

obj.__proto__ = Person.prototype

(3)将构造函数Person内部的this与实例对象obj做绑定,并对构造函数内部的值做一个赋值操作

(4)根据构造函数的返回值类型确定确定新创建的实例对象的具体值。若构造函数的返回值是引用类型的,那么我们新创建的实例对象就是该返回值;若构造函数的返回值不存在(就如上面)那么就默认返回调用构造函数的代码;若返回值存在但不为引用类型,那么返回该新创建的对象

由此引出,什么是引用类型?什么是基础类型呢?

基础类型:Number、String、Undefined、Null、Boolean、Symbol

引用类型:凡是属于Object类型的都是引用类型(包括但不限于Array、Object、Function)。

posted @ 2022-04-29 16:35  坚持的小白菜  阅读(840)  评论(0)    收藏  举报