New運算子到底做了什麼

常好樂發表於2017-10-22

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
    }
}複製程式碼

相關文章