__proto__
- 所有 Object 都有這個 property
- 指向一個 Object
- 可以把它指向的 Object 想像成
父物件
- 因此 Object 們都可以使用其 __proto__ 中的變數/函數
- __proto__ 物件也會有其 __proto__
- 父類別的父類別
- 形成一個
Prototype chain
- 兩個物件可以有同一個 __proto__ 物件, 即
繼承至同一個父類別的概念
- 可以把它指向的 Object 想像成
- Prototype chain
- 當存取一個物件沒有的屬性, 會往上層去找其 proto 是否有該屬性, 直到走完整個 Prototype chain為止
1 | var person = { |
除了 Primitive types 外, 其餘都是 Object, 因此一些 Build-in function 都掛載在他們的 __proto__ 上
- Array: .forEach(), .map(), .reduce() … etc.
- Function: .call(), .apply() … etc.
- … etc.
Setting an object as another object’s __proto__
- Using
Object.create(${father})
- Using
1 | var person = { |
Constructor function 的 prototype
建構子函數
即函數物件, 因此本身有 __proto__ 這個屬性- 而函數物件相較於其他物件, 有一個特殊的屬性
prototype
- 此屬性在 function 為
建構子函數
時使用 - 透過該建構子函數建構出的物件的 __proto__, 即
指向該建構子函數的 prototype
屬性 - 可以透過 prototype 屬性, 來設定由該建構子函數建構出來物件的
共用變數/函數
, 以節省記憶體空間 - Example
- 此屬性在 function 為
1 | function Person(firstname, lastname){ |