前言
介紹原型鏈之前,我們要先從介紹 Javascript 的名稱由來開始說起
名稱由來
Java 跟 Javascript 兩個程式語言的名稱非常相近,但是寫法上卻有很大的差異,在 Javascript 推出的時候,基於商業上的考量,
為了吸引 Java 的開發者也投入 Javascript 的開發,所以將這個語言的名稱定義成大家所熟悉的 Javascript。
其中 Javascript 的一個特性是源自於 Java 的類別繼承,所以 Javascript 就使用 new 這個方法產生一個新的物件,透過 new
這個方法所產生的物件會有一個繼承的特性,就稱之為原型繼承。
Java 的 類別繼承
類別 (class) 是屬於 Java 物件導向的一種概念,當你需要定義狗,而且數量不只一隻的時候,也就是需要重複定義的時候。
首先你會創建一個狗的類別,其中包含了一些狗應該要有的通用屬性,跟一些方法。以屬性來說,會有顏色、體型等,方法則是
吠叫之類的。再來就是定義狗的實體,例如說我們定義一隻狗叫做比比,比比的顏色是棕色。透過這個方式我們可以定義出無限
多隻想要的狗出來。
假設我們是造物主,我們希望在這個世界上有非常多的狗,所以我們必須先在腦中對於狗有一些特定的通用印象,這個印象就是
所謂的 class。當這個想法要實際創造出一隻狗的時候,就需要用到剛剛提到的 new 的方法進行實體化,而實體化出來的狗就
叫做 Instance
並且實體化的狗具有自己的毛色,體型大小以及能夠吠叫的方法。
所以實體的繼承,就是可以取用 class 原型的屬性以及方法。
Javascript 的原型繼承
為什麼 Javascript 是屬於原型繼承呢 ?
因為 Javascript 中的特性,基本上都是物件,所以並沒有 class 的概念,所以它必須使用原型的概念來做出類似類別
(class) 的方法。Javascript 雖然沒有類別繼承,但在 ES6 中也推出了類似類別 (class) 繼承的方法,但是要特別注意,
ES6 的 class 本質上還是 Javascript 的原型繼承,並不是引入其他語言的類別導向。