2013-12-22 29 views
4

所以我在CodeAcademy上通過JavaScript學習了幾節課,並且我碰到了關於原型的這一節。JavaScript中的原型有什麼意義?爲什麼不直接添加方法到構造函數?

從代碼中的位:

function Dog(breed){ 
    this.breed = breed; 
}; 

Dog.prototype.bark = function(){ 
    console.log("Bark!"); 
    }; 

我不明白這樣做這樣的地步。爲什麼不這樣做呢? (我第一次瞭解到的方式)

function Dog(breed){ 
    this.breed= breed; 
    this.bark = function(){ 
     console.log("Bark!"); 
    }; 
} 

第二種方式,一切都在一個塊中,並且沒有分開。第一個的優點是什麼?我知道有,我只是沒有看到它。

+0

@ user1768884:這是一個非常好的問題。這裏有不少人能夠給出令人驚訝的詳細答案這樣的問題!希望能夠看到答案。 –

+0

對於你的小例子來說,它並不重要,它對原型沒有任何意義,但想象你有許多要創建的對象,並且可以使用一個通用對象作爲模板,然後在該通用模板上創建原型,一旦你改變了這個通用模板,所有其他的對象也會自動更新,那麼它對你來說就更有意義了,你就會明白爲什麼原型設計很好,並且可以爲你節省大量的工作。 – adeneo

回答

2

一個區別是,在原型的情況下,函數只存在一次,改變它會改變使用這個原型的所有對象。在this.的情況下,函數在每個對象中重複。

這在腳印和語義上都有所不同。

0

這是出於性能原因。當創建對象的新實例並調用本地方法時,您爲每次創建都需要更多的內存。另一方面,當使用原型時,無論創建的Object的數量如何,它都更安全。

相關問題