我試圖理解JS中原型的概念。我找到了下面的例子。我問自己,如果函數是在對象之外聲明的話。它有助於節省資源嗎?爲什麼把函數放在對象之外?
JS
function Animal (name) {
this.name = name;
}
Animal.prototype.speak = function() {
console.log(this.name + ' makes a noise.');
}
我試圖理解JS中原型的概念。我找到了下面的例子。我問自己,如果函數是在對象之外聲明的話。它有助於節省資源嗎?爲什麼把函數放在對象之外?
JS
function Animal (name) {
this.name = name;
}
Animal.prototype.speak = function() {
console.log(this.name + ' makes a noise.');
}
當您在Javascript中使用函數作爲類時。通常,函數內部會初始化字符串或數字或其他基本屬性;和方法進入原型(這確實有助於節約資源:))。就像你的示例代碼。
還有其他方法可以達到同樣的「優雅行爲」,但使用原型是最基本的方法。
是的,它的作用。 當您在對象構造函數(Animal)中聲明該方法時,每次我們實例化一個對象時它都會被寫入內存。但是,如果我們爲prototype創建屬性,Animal的每個實例都將共享此方法,它將只寫入內存一次。
它並不與性能或「節約資源」有關。這個例子表明你可以使用原型添加一個動物類的方法。相關:http://sporto.github.io/blog/2013/02/22/a-plain-english-guide-to-javascript-prototypes/ –
我認爲它的確如此,因爲你只聲明一次而不是每個實例的動物。 –
你沒有把「功能以外的對象」。比方說你把「原型方法定義放在構造函數之外」會更準確。 –