手写new
- 在写代码前,一定要分析这个api或者关键字实现了什么,拥有什么功能,如果对其原理认识不到时,也不能达到一比一还原
new做了哪些事
- new出来的实例是一个对象
- 拥有构造函数的所有原型方法
- 能够接受new 构造函数时传入的所有实参并在实力对象中执行
- 下面我们看代码:
function myNew(fn, ...args) {
//声明对象
const obj = new Object()
//将构造函数原型上的方法附到我们率先导出的对向上
obj.__proto__ = fn.prototype
//执行构造函数并把this指向更改为obj
let res = fn.call(obj,...args)
//return出去
return typeof res == 'object' ? res || obj : obj
}
- 这几样就实现了手写一个new,其实很简单,在手写代码时我们首先要想清楚这个关键字或者api实现了什么,我们分布还原就好了