2012-10-26 34 views
3

我想知道的是什麼樣的情況下follwoing insideFnoutsideFn之間的區別:這2個javascript函數有什麼區別?

function Construct() 
{  
    this.insideFn = function(obj){ 
    .... 
    } 
} 

Construct.prototype.outsideFn = function(obj){ 
     ... 
} 

,哪一個是有效地使用?

回答

-1

第一個function Construct() {}是一類(在JavaScript它是一個對象),而後來您所繼承(延伸)的這一類使用關鍵字prototype和增加一個功能outsideFn。 JavaScript中沒有特定的類,所以你必須使用對象作爲類。

+0

-1:這是答案是混亂,因爲它使用了不準確的術語(「類」,「繼承」)和,雖然它在技術上提出一些適用的點,它並沒有解釋這些問題的後果。 –

5

在第一種情況下,使用Construct創建的每個實例都有自己的insideFn,如果您使用多個實例,這會浪費內存。在第二種情況下,Construct的每個實例將只提及outsideFn。所以後者更好。

+0

只會浪費內存,如果有多個實例 – Thilo

+0

@Thilo謝謝,修正 – bjornd

+0

第一種情況還有一個好處:'insideFn'可以訪問'Construct'中聲明的所有變量。這樣,您可以模擬私有實例變量。 –

0

在第一個構造中,該方法是Construct實例的屬性。 在第二構建體的方法是從Construct

prototype對象的屬性如果定義prototype對象內部的功能,他們將呼叫時相同。 prototype變體通常可以節省內存並加快代碼的速度。 您也可以重載對象實例中的prototype函數,以更改對象的默認行爲。

爲了更好的英語以及更多詳情,請參閱http://www.javascriptenlightenment.com/