new操作的执行过程

1.创建一个新对象

2.将新对象的-proto-指向constructor(构造函数).prototype,挂载到原型链上

3.执行构造函数,并将构造函数的this指向新对象

4.返回新对象

实现代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 自定义new创建实例
function create(constructor,...args){
let newObj = Object.create(constructor.prototype)
// Object.craete()方法相当于下面两行代码
// let obj = {}
// obj.__proto__ = constructor.prototype
let res = constructor.apply(newObj,args)
// 如果调用构造函数返回的是对象则返回该对象,否则返回newObj
return res instanceof Object ? res : newObj
}
function person(name='cjx',age='20'){
this.name = name
this.age = age
}
const person1 = create(person,'hhh','24')
console.log(person1)