New运算符简单地说就是:
第一步:创建一个新对象,这个对象继承自构造函数的原型(也就是foo.prototype)
第二步:然后将作用域(控制上下文的指针this)转移到这个新对象中来,再执行New 后面的那个构造函数。
第三步:如果构造函数返回了一个“对象”,那么这个对象会取这个哥New出来的结果。如果构造函数没有返回对象,那么New出来的结果第一步的对象。
New操作符内部执行步骤具体如下:
var new1 = function (foo) {
var o1 = Object.create(foo.prototype);//创建一个新对象,这个新对象继承自构造函数foo的原型
var o2 = foo.call(o1); //执行这个foo,并将this指针指向o1
if( typeof o2 ==='object'){ //判断o2是否是 object类型 也就是有没有返回对象
return o2
}
else {
return o1
}
}