New运算符到底做了什么

564 阅读1分钟

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