搜尋

首頁  >  問答  >  主體

javascript - 又是原型的問題?

不懂以下兩種寫法在實質上有什麼差別?

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);

那兩者在哪些方面有可比性呢?求教,謝謝!

怪我咯怪我咯2751 天前548

全部回覆(3)我來回復

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-19 10:32:56

    在記憶體節約方面有差異

    • 第一種方式,prototye定義,所有後代都共享一個方法定義,記憶體中只有佔一個空間,無論你創建了多少實例,所有實例的age方法都指向這個記憶體位址。

    • 第二種方式,在建構子內定義,每建立一個實例,age方法的定義就會分配一個空間,屬於該實例專用。實例創建多了,記憶體成比例增長。

    綜上,如果是共有的方法,請放到prototype中。

    回覆
    0
  • 習慣沉默

    習慣沉默2017-05-19 10:32:56

    第二種寫法是建構函式模式,用是好用,但是這種方法的主要問題是每個方法都要在每個實例上重新建立一遍。
    第一種原型模式方法就解決了這個問題,讓所有物件實例共享它所包含的屬性和方法。

    回覆
    0
  • 習慣沉默

    習慣沉默2017-05-19 10:32:56

    簡單來說,功能一樣,只不過大多數情況下會把方法寫在原型中,把屬性寫在構造函數中,所以第一種方法比較常用

    回覆
    0
  • 取消回覆