2016-11-02 21 views
0

我試圖理解JS中原型的概念。我找到了下面的例子。我問自己,如果函數是在對象之外聲明的話。它有助於節省資源嗎?爲什麼把函數放在對象之外?

JS

function Animal (name) { 
    this.name = name; 
    } 
Animal.prototype.speak = function() { 
    console.log(this.name + ' makes a noise.'); 
} 
+1

它並不與性能或「節約資源」有關。這個例子表明你可以使用原型添加一個動物類的方法。相關:http://sporto.github.io/blog/2013/02/22/a-plain-english-guide-to-javascript-prototypes/ –

+2

我認爲它的確如此,因爲你只聲明一次而不是每個實例的動物。 –

+0

你沒有把「功能以外的對象」。比方說你把「原型方法定義放在構造函數之外」會更準確。 –

回答

0

當您在Javascript中使用函數作爲類時。通常,函數內部會初始化字符串或數字或其他基本屬性;和方法進入原型(這確實有助於節約資源:))。就像你的示例代碼。

還有其他方法可以達到同樣的「優雅行爲」,但使用原型是最基本的方法。

0

是的,它的作用。 當您在對象構造函數(Animal)中聲明該方法時,每次我們實例化一個對象時它都會被寫入內存。但是,如果我們爲prototype創建屬性,Animal的每個實例都將共享此方法,它將只寫入內存一次。

+0

在絕大多數情況下哪一個根本就不重要,並且還允許你使用在構造函數中聲明的「私有」變量。 –

+0

你能給我一個@torazaburo的來源 – user2952265

+0

哪個部分的來源? –

相關問題