模拟new实现

208 阅读1分钟
  1. 创建一个全新的对象
  2. 被执行[[prototype]](也就是__proto__)链接
  3. 使this指向新创建的对象
  4. 创建的每个对象最终被[[prototype]]链接到这个函数的prototype对象上
  5. 如果函数没有返回对象类型Object(包含Function,Array,Date,RegExp,Error),那么表达式中的函数调用将返回该对象引用

    /**
    * 模拟new实现
    */
    const objectFactory = () => {
        const obj = new Object();
        const Constructor = [].shift.call(arguments);
        obj.__proto__ = Constructor.prototype;
        const ret = Constructor.apply(obj, arguments);
        return typeof ret === 'object' ? ret : obj;
    }


参考资料

  1. www.cxymsg.com/guide/jsWri…

微信公众号“前端那些事儿”