new对象时内部做了什么?

发布时间 2023-08-19 15:32:33作者: 乐得逍遥

1.创建一个新对象;
2.该对象执行[[Prototype]](即__proto__)链接;
3.将构造函数的作用域赋值给新对象(this指向该新对象);
4.执行构造函数中的代码(给该对象添加属性、方法);
5.若无显式返回对象或函数,才返回新对象。

 

    function newFn(fn, ...args) {
        // 1.创建一个新对象
        const obj = {}
        // 2.将fn的原型链复制道对象的原型链上
        obj._proto_ = fn.prototype
        // 3.修改fn函数的this并执行
        const res = fn.apply(obj, args)
        // 4.如果fn的返回值是一个对象则返回,如果是非对象则返回obj
        return typeof res === 'object' ? res : obj
    }
    const f2 = newFn(fn, '参数')