实现一个简单的new

实现一个简单的new

new操作符干了什么?自己怎么实现一个new操作符。

  1. 创建一个空的简单JavaScript对象(即{});

  2. 为步骤1新创建的对象添加属性__proto__,将该属性链接至构造函数的原型对象 ;

  3. 将步骤1新创建的对象作为this的上下文 ;

  4. 如果该函数没有返回对象,则返回this。

    function _new(ctor, ...args) {
      if (typeof ctor !== "function") return false;
      // 创建一个空的简单JavaScript对象(即{});
      let obj = {};
      // 为步骤1新创建的对象添加属性`__proto__`,将该属性链接至构造函数的原型对象 ;
      obj.__proto__ = ctor.prototype;
      //  将步骤1新创建的对象作为this的上下文
      let res = ctor.apply(obj, [...args]);
      // 如果该函数没有返回对象,则返回this,因为typeof null 也是Object,所以还要进行null的判断
      return typeof res === "object" && res !== null ? res : obj;
    }