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