Prototype JavaScript 中所有的對象(除了少數例外)都有自己的 prototype。 而且,對象的 prototype 本身也是一個對象。 ```javascript= function Bird(name) { this.name = name; } typeof Bird.prototype; ``` 正因爲 prototype 是一個對象,所以 prototype 對象也有它自己的 prototype! 這樣看來的話,Bird.prototype 的 prototype 就是 Object.prototype: ```javascript= Object.prototype.isPrototypeOf(Bird.prototype); let duck = new Bird("Donald"); duck.hasOwnProperty("name"); ``` hasOwnProperty 是定義在 Object.prototype 上的一個方法,儘管在 Bird.prototype 和 duck上並沒有定義該方法,但是我們依然可以在這兩個對象上訪問到。 這就是 prototype 鏈的一個例子。 在這個 prototype 鏈中,Bird 是 duck 的 supertype,而 duck 是 subtype。 Object 則是 Bird 和 duck 實例共同的 supertype。 Object 是 JavaScript 中所有對象的 supertype,也就是**原型鏈的最頂層**。 因此,所有對象都可以訪問 hasOwnProperty 方法。