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);//報錯
複製程式碼
為什麼到這裡就報錯了呢?因為這裡涉及到了js運算子優先順序,廢話不多說附上一張表格:
所以此處涉及到的優先順序為: 圓括號>new()>函式呼叫>new
結果分析:
1、從報錯資訊來看,new Parent.num執行順序是這樣的:先執行Parent.num,此時返回結果為undefined;後執行new,因new後面必須跟建構函式,所以new undefined會報錯。
解決辦法為: (new Parent).num.原來因為.的優先順序大於new,先執行了Parent.num。加上()後,()優先順序大於. 所以先執行new Parent ,返回的是例項。
執行結果附圖:
2、new Parent().num相當於(new Parent()).num,所以結果返回1。