1. 程式人生 > >js中new函式後帶括號和不帶括號的區別

js中new函式後帶括號和不帶括號的區別

用new建立建構函式的例項時,通常情況下new 的建構函式後面需要帶括號(譬如:new Parent())。 有些情況下new的建構函式後帶括號和不帶括號的情況一致,譬如:

function Parent(){
  this.num = 1;
}
console.log(new Parent());//輸出Parent物件:{num:1}
console.log(new Parent);//輸出Parent物件:{num:1}

有無括號時函式執行結果圖示: 這裡寫圖片描述

但有些情況下new的建構函式後帶括號和不帶括號的情況並不一致,譬如:

function Parent(){
this.num = 1; } console.log(new Parent().num);//1 console.log(new Parent.num);//報錯

有無括號時函式執行結果圖示: 這裡寫圖片描述

結果分析:

因為new 的運算優先順序要小於 . 的運算優先順序 ,new Parent.num執行順序是這樣的:先執行Parent.num,此時返回結果為undefined;後執行new,因new後面必須跟建構函式,所以new undefined會報錯。

在 new 的時候後面的括號不是執行的意思,是將這一塊的優先順序提升上去了,所以可以在宣告時立即呼叫物件的屬性和方法

所以,new Parent.num程式碼相當於new (Parent.num);new Parent().num相當於(new Parent()).num。