new 关键字做了什么
1.调用函数
2.创建一个新的对象,把实例对象的隐式原型指向构造函数的显式原型
3.改变 this 指向,把 this 绑定在实例对象上
4.返回一个对象,如果构造函数本身返回的是一个对象,那么就返回这个对象,如果不是就返回这个实例对象
自定义实现 new 关键字
function _new(fn,...args){
const obj=Object.create(fn.prototype)
const result = fn.apply(obj,args)
return result instanceOf Object ? result : obj
}
测试
function A(d) {
this.d = d
return {
a: 6
}
}
console.log(new A(123));//{a:6}
console.log(_new(A, 123));//{a:6}