new实现

236 阅读1分钟
let constance = _new(Constructor, args);
// 实现过程伪代码
function _new(fn, ...arg) {
    const obj = Object.create(fn.prototype);
    // 等价于
    // let obj = new Object();
    // obj.__proto__ = fn.prototype;

    const ret = fn.apply(obj, arg);
    return ret instanceof Object ? ret : obj;
}

调用new会创建一个新对象(也就是构造函数的实例),this会绑定到new出来的实例上。

  1. 创建一个新对象obj;

  2. 将实例的__proto__ 指向构造函数的原型对象,实现继承构造函数原型上的功能;

  3. 当调用_new时,就会执行构造函数的apply方法,完成obj绑定到this的操作;(也就是this会指向新构建的对象)

  4. 除非构造函数的apply方法的返回了其他对象,不然就返回新创建的对象obj;