构造函数在new 实例化的时候做了哪些操作
1、在构造函数内部创建了一个空对象
2、将构造函数的prototype属性指向这个对象的__proto__属性
3、将构造函数的this指向该对象(也就是给这个对象赋值)
4、判断这个构造函数有没有返回值(如果有 就返回值 如果没有 就返回这个对象)
// 手写new 一个关键字
function selfNew(fn,...args){
// 创建一个instance对象 该对象的原型是fn.prototype
let instance = Object.create(fn.protorype)
// 调用构造函数 使用apply 将this指向新生成的对象
let res = fn.apply(instance,args)
//如果fn函数有返回值 并且返回值是一个对象或方法 则返回对象 否则返回新生成的instance对象
return typeof res === 'object' || typeof res === 'function ' ? res :instance
}