手写new

74 阅读1分钟
function myNew(fn, ...args) {
    //创建一个构造函数
    let obj = {};
     //将构造函数的原型指空对象
    Object.setPrototypeOf(obj, fn.prototype)
    //改变this的指向,让this指向新的原型对象
    let res = fn.apply(obj, [...args])
    //确保new返回的是一个Object对象
    return res instanceof Object ? res : obj;
}