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; } };