用new創建構造函數的實例時,通常情況下new 的構造函數后面需要帶括號(譬如:new Parent())。
有些情況下new的構造函數后帶括號和不帶括號的情況一致,譬如:
function Parent(){
this.num = 1;
}
console.log(new Parent());//輸出Parent對象:{num:1}
console.log(new Parent);//輸出Parent對象:{num:1}
1 1 function Parent(){ 2 2 this.num = 1; 3 3 } 4 4 console.log(new Parent());//輸出Parent對象:{num:1} 5 5 console.log(new Parent);//輸出Parent對象:{num:1}
有無括號時函數執行結果圖示:

但有些情況下new的構造函數后帶括號和不帶括號的情況并不一致,譬如:
1 function Parent(){ 2 this.num = 1; 3 } 4 console.log(new Parent().num);//1 5 console.log(new Parent.num);//報錯
有無括號時函數執行結果圖示:

結果分析:
從報錯信息來看,new Parent.num執行順序是這樣的:先執行Parent.num,此時返回結果為undefined;后執行new,因new后面必須跟構造函數,所以new undefined會報錯。
new Parent().num相當于(new Parent()).num,所以結果返回1。
從結果來看,new Parent.num代碼相當于new (Parent.num);new Parent().num相當于(new Parent()).num。由此看來 new的構造函數后跟括號優先級會提升。
原文:https://blog.csdn.net/yihanzhi/article/details/80050716
posted on
浙公網安備 33010602011771號