可能重複:
Use of ‘prototype’ vs. ‘this’ in Javascript?
Advantages of using prototype, vs defining methods straight in the constructor?爲什麼我可以使用原型,當我可以「附加」一個函數的構造函數?
我學習的原型在Javascript。我不明白的一件事是爲什麼我應該使用CONSTRUCTOR_FN.prototype.METHOD_NAME
慣例添加一個函數,而不是僅僅在CONSTRUCTOR
的主體中使用this.METHOD_NAME
?據
function Cat (name) {
this._name = name;
this.say = function (thing) {
alert(this._name + " says: '" + thing + "'");
}
}
function Dog (name) {
this._name = name;
}
Dog.prototype.say = function (thing) {
alert(this._name + " says: '" + thing + "'");
}
var c = new Cat("Mitt");
var d = new Dog("Barak");
c.say("War");
d.say("No war");
,我可以同時看到Cat
和Dog
建設者的工作是相同的:
我寫了這個小碼澄清。如果我從this question正確理解,唯一的區別是,當你添加一些東西給原型時,來自該構造函數的所有對象都會擁有它。還有其他原因嗎?
沒有其他原因,但它是一個更好的編程模式,並且在創建多個實例時效率更高。這應該不夠嗎? – Bergi
你的意思是當有1000個'Dog'實例時,它們全都使用相同的'say()'方法,而對於1000個'Cat'實例,我們將有1000個'say()'函數副本? – AlexStack