不懂以下兩種寫法在實質上有什麼差別?
function Person() {
}
Person.prototype.age = function(n) {
return n;
}
var person = new Person();
person.age(9);
上面這種寫法是透過原型,讓實例化後的物件能夠呼叫父類別的函數。
下面這種方式不通過原型,但是在用法上完全一樣。
function Person() {
this.age = function(n) {
return n;
}
}
var person = new Person();
person.age(9);
那兩者在哪些方面有可比性呢?求教,謝謝!
过去多啦不再A梦2017-05-19 10:32:56
在記憶體節約方面有差異
第一種方式,prototye定義,所有後代都共享一個方法定義,記憶體中只有佔一個空間,無論你創建了多少實例,所有實例的age方法都指向這個記憶體位址。
第二種方式,在建構子內定義,每建立一個實例,age方法的定義就會分配一個空間,屬於該實例專用。實例創建多了,記憶體成比例增長。
綜上,如果是共有的方法,請放到prototype中。
習慣沉默2017-05-19 10:32:56
第二種寫法是建構函式模式,用是好用,但是這種方法的主要問題是每個方法都要在每個實例上重新建立一遍。
第一種原型模式方法就解決了這個問題,讓所有物件實例共享它所包含的屬性和方法。