原型在哪裡?
JavaScript 是一門物件導向的程式語言,因為沒有 Class,所以它的繼承方法是透過 「原型」(prototype) 來進行實作。
原形的特性
- 一樣具有物件的特性
- 向上查找
- 原型可共用方法及屬性
當我們嘗試在某個物件找一個它本身並不存在的屬性時,它會往上(原型物件)找尋,直到找到最頂層級時,都會找到Object.prototype
才會停止。
JS當中原型跟實體都是物件,而兩者都有屬性及方法
這邊可以看到實體可以繼承原型的屬性及方法,實體也能夠自定義自己的屬性及方法。
這邊可以看到原型找不到屬性或方法時會往它的原型去尋找,假設它沒有找到的話,它會繼續往上面的原型去找,直到找到最頂層級。
原型的方法都能夠用點運算子呼叫出來。
如果一個原型新增了兩個實體的話,那這兩個實體都會繼承原型的屬性。
1 | var a = [1, 2, 3]; |
這邊可以看到 a
的原型是 array
。
而只要是實體都能夠繼承原型的屬性及方法,這邊也能夠看到 a
能夠使用 array
的 forEach()
這個方法。
這邊我們用 __proto__
來新增原型的方法。
這個原型的方法非正規,這邊只是示範用
1 | var a = [1, 2, 3]; |
這邊如果輸入 a
跟 b
可以發現這點
它們同樣都繼承了 array
的 getLast()
這個方法,所以都能夠共用 getLast()
這個方法。