js的new 操作符

28 阅读1分钟

new 操作符调用构造函数会执行如下操作:

1.创建空的新对象

2.构造函数的prototype属性 赋给 新创建的对象的__proto__属性

3.构造函数中的this指向该对象

4.执行构造函数内部的代码

5.如果构造函数没有显式返回一个对象(或者返回的是一个非对象的基本类型值),那么new操作会自动返回新创建的对象实例。如果构造函数返回了一个新的对象,则该返回值将替代默认的实例对象被返回。

手动模拟new操作

function myNew(Fun, ...args) {
    // 创建一个空对象
    let obj = {};

    // 设置原型链
    obj.__proto__ = Fun.prototype;

    // 调用构造函数,绑定this并传递参数
    let res = Fun.apply(obj, args);

    // 判断构造函数的返回值是否为对象,如果是则返回该对象,否则返回新创建的实例
    return typeof res === 'object' && res !== null ? res : obj;
}