你或許有疑問,為什麼MDN查的方法中間會有prototype,JavaScript 是個沒有實做 class關鍵字(ES6引入,語法糖)的動態語言,JavaScript 中只有一個建構子:物件,而每個物件都有一個 prototype (原型),物件可以從原型上繼承屬性和方法,並且可以沿用、共享,這就是 prototypal inheritance (原型繼承) ; 每個物件都有prototype,可能是null或是另一個物件,null 在定義裡沒有原型、也是原型鏈(prototype chain)的最後一個連結。
何謂原型鏈(prototype chain)呢?JavaScript 被稱作是「原型架構(prototype-based)」的程式語言,在每一個 JavaScript 的物件中,都包含了一個原型物件(prototype object)可以當作該物件的模版,用來讓 JavaScript 的物件可以從原型物件中繼承屬性和方法,而原型物件本身可能又會有屬於它的原型物件,當我們尋找該物件有沒有某種屬性,如果沒有,就會往原型尋找,原型沒有,就會繼續往上一層尋找,直到找到或是到null為止。
prototype (原型)源頭是物件(object),但是prototype是種隱藏屬性,所以瀏覽器有_proto_的方法,但是_proto_並不在 ECMAScript 規範中,所以前端實際上如果需要取得原型會用getPrototypeOf( )。