2015-10-19 40 views
1

樣本函數聲明函數:爲什麼函數在構造函數中聲明時不使用new關鍵字?

function Rectangle(height, width) { 
    this.height = height; 
    this.width = width; 
    this.calcArea = function() { 
     return this.height * this.width; 
    }; 
    // put our perimeter function here! 
    this.calcPerimeter = function() { 
    return 2 * this.height + 2 * this.width; 
}; 

樣品新的函數聲明:

var actions = new function() { 
    console.log("this is to do something"); 
} 

爲什麼我們使用new關鍵字,同時宣佈了新的功能,但同時在構造函數中聲明它不使用new關鍵字? ?

+0

'行動'沒有在這裏聲明爲一個函數。 – Bergi

+3

'new'關鍵詞沒有達到你認爲的那樣。 – Pointy

+1

你在哪裏看到'var actions = new function(){...}'? –

回答

0

new是一個運營商。它分配一個對象實例(併爲其分配一個原型)。您創建的函數不是任何類的實例,也不會創建爲多個副本。靜態聲明定義了將存在的唯一實例。

+0

函數是Function類的實例,它們是在每個函數定義上創建的。不確定這裏的「靜態聲明」是什麼意思。 – Bergi

+0

函數不是動態分配的 - 它們是通過聲明創建的。 (至少,它們不會比任何'var'動態分配)。您不會創建'calcPerimiter'函數來執行程序中的某個任務,然後創建27個不同的calcPerimiter對象。只有一個。它佔據了一塊記憶。如果你想以某種方式製作27個獨立的副本,那麼'new'關鍵字就是合適的。 –

+1

每個被評估的函數表達式實例化一個新的函數實例。該函數的*代碼*可能只存在一次,但肯定有一個新的函數對象在每次評估表達式時創建。 – Pointy

相關問題