new运算符的原理:

第一步:创建一个空对象,该对象继承构造函数的原型对象

第二步:执行这个构造函数,并且把this指向该空对象

第三步:返回:如果构造函数执行后返回的结果是一个object类型,则返回这个结果;否则返回第一步创建出来的空对象

//new运算符的原理
      var new2 = function (func) {
          var o = Object.create(func.prototype);  //生成新对象,对象继承构造函数的原型对象
          var k = func.call(o); //执行这个构造函数,并且把this指向o
          if (typeof k === 'object') {
              return k;
          } else {
              return o;
          }
      };