new关键字解析

new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。new 关键字会进行如下的操作:

  1. 创建一个空的简单JavaScript对象(即{});
  2. 链接该对象(即设置该对象的构造函数)到另一个对象 ;
  3. 将步骤1新创建的对象作为this的上下文 ;
  4. 如果该函数没有返回对象,则返回this。

手写new的具体实现

        function _new(func, ...args){
                        // 尽量不使用__proto__
                        // let obj = {};
                        // obj.__proto__ = func.prototype
            let obj = Object.create(func.prototype);//兼容IE
            let result = func.call(obj, ...args);
            if(result != null && /^('object|function')$/.test(result)) return result;
            return obj
        }                
原文地址:https://www.cnblogs.com/zmyxixihaha/p/13281531.html