手写new

自定义new方法

function myNew(fn, ...args) {
    // 创建一个空对象
    const obj = {}
    // 对象的隐式原型指向构造函数的显式原型
    obj.__proto__ = fn.prototype
    // 执行构造函数,修改this指向,指向新的对象,并保存函数返回值
    const result = fn.apply(obj, args)
    // 判断返回值类型,对象则处理后返回,值类型则直接返回新对象
    return result instanceof Object ? result : obj
}

使用

function Person() {
    return {
        name: 'zs'
    }
}

const p = myNew(Person)
console.log(p); // {name: 'zs'}