繼承與原型鍊
在面試中重複率非常高的考題就是 JavaScript 中的繼承與原型鍊啦,出現頻率大概有八成吧。這個比例來自我面試過的數據庫(僅供參考)。
其實它的原理就是 JavaScript 是一個物件導向(oop)的程式語言,了解 object 使用方法,其實你對繼承與原型鍊就會一半了。
這篇文章其實只是為了幫助我去更認識一下他們的原理。並不會特別去講用法,只是想了解用法的人可以轉台了,這篇文章不會特別提到。大家今天可以透過我的角度來認識下 轉職工程師是如何從先會用在慢慢把基礎漸漸抓回來的過程吧。
繼承就是一個物件取用另一個物件的屬性或方法。而 JavaScript 的繼承是原型繼承,繼承的物件是透過原型鍊來連結其物件繼承的屬性及方法。
假設有 貓科 和 老虎 有兩個物件,讓 老虎 繼承 貓科,那麼 老虎 就可以使用 貓科 的屬性及方法,而 貓科 就是 老虎 的原型物件。有點類似生物學裡面界門綱目科屬種的概念
DevTool將物件Console 出來並且展開,就可以看到 __proto__
,這就是原型物件。
透過繼承 ,我們可以重複使用或延伸原有程式碼,不用再次重複宣告。
而原型鏈的概念就是 每個物件都會有自己的 prototype 物件 ,老虎往上是貓科的概念。可以一直往上追朔,直到最上層物件的原型為 null 為止,而這樣一層層串起來的 prototype 就是原型鏈。
而當你尋找物件屬性時,此物件沒有則會往上層原型繼續尋找,直到找到或是回傳 undefined 為止