实现New实例化(记一下面试使用)

53 阅读1分钟
function sea(name){
     this.name=name
}
function mineNew(f,...ags){//...ags可能会不只有一个参数
    const o={}//定义一个空对象,可能会作为结果返回
    o.__proto__=f.prototype//把新创建的对象的指向改变
    const r = f.apply(o,ags)//将新创建的对象作为参数传进来
    const isTrue = r&&typeof r==='function'||typeof r ==='object'//判断是否存在r
    return isTrue?r:o
}
const c= new sea("明明")
const c = mineNew(sea,"明明")
console.log(c)

直接对外new了一个对象

具体过程:创建一个空对象,关联构造函数的原型 ,将this指向空对象并且执行,判断构造函数有没有返回对象,有的话返回构造函数返回的对象,没有就返回定义的对象