JavaScript 入門:類別的 extends 與 super 是什麼?

更新 發佈閱讀 7 分鐘

前一篇文章簡單的介紹了 JavaScript 中的 class 以及他的語法,本篇文章將延續上一篇的基礎,進一步深入介紹:

  • extends 如何建立繼承關係
  • super() 在建構子中的角色
  • super.method() 如何搭配覆寫(override)使用
  • 以及 class 背後真正的 prototype 運作原理

class 語法

  • class 關鍵字宣告一個類別,建構函式與方法寫在大括號 {}
  • new 關鍵字創建一個類別實例
  • obj.method() 呼叫方法
class Person{
constructor(name, age){
this.name = name;
this.age = age;
}
greet(){
console.log(`Hi, I'm ${this.name}. I'm ${this.age} years old.`)
}
}

const elaine = new Person("Elaine", 18);
​elaine.greet(); // Hi, I'm Elaine. I'm 18 years old.

extends

JavaScript 可以用 extends 關鍵字實作「類別繼承」,也就是讓另一個類別繼承已定義好的類別。

「繼承」代表著「is-a」的關係,學生是個人、上班族是個人,這種關係都可以用繼承。

被繼承的類別叫做父類別或是基類,繼承而來的類別則是叫做子類別

class Person{
constructor(name, age){
this.name = name;
this.age = age;
}
greet(){
console.log(`Hi, I'm ${this.name}, ${this.age} years old.`);
}
}

// Student 繼承 Person
class Student extends Person{
introduce(){
console.log(`I'm a student!`);
}
}
  • 子類別可以使用父類別的方法,也可以定義自己的方法。
const elaine = new Student("Elaine", 18);
elaine.greet(); // Hi, I'm Elaine, 18 years old.
elaine.introduce(); // I'm a student!
extends 實際上做的是:
1. Object.setPrototypeOf(Student.prototype, Person.prototype)
2. Object.setPrototypeOf(Student, Person),因此子類別也會繼承父類別的靜態方法

super

super 有兩種用法:(1) 調用父類別的建構子 (2)在子類別中呼叫父類別方法

(1) super() 調用父類別的建構子

如果想在子類別的 constructor 中使用 this 關鍵字,必須先調用 super() 方法。

super() 會執行父類別的 constructor,並初始化子類別的 this

class Student extends Person{
constructor(name, age, major){
// 呼叫 super()
super(name, age);
this.major = major;
}
introduce(){
console.log(`I'm a ${this.major} student!`);
}
}
const elaine = new Student("Elaine", 18, "Computer Science");
elaine.greet(); // Hi, I'm Elaine, 18 years old.
elaine.introduce(); // I'm a Computer Science student!

為何要呼叫 super()

因為子類別的實例同時也是父類別的實例,當我們實例化一個 Student 物件,其實是建立一個 Person 型別的物件,再加上一點 Student 自己的行為。

new Student("Elaine", 18, "Computer Science")

子類別的 constructor 叫做 derived constructor,這種建構子的特殊規則是不能建立自己的 this,必須呼叫 super(),才能取得初始化後的 this。

(2) 用 super.method() 呼叫父類別方法

super.method() 用來在子類別中呼叫父類別 prototype 上的方法,常會搭配覆寫(override) 一起使用,讓子類別在擴充父類別行為時保有原本的邏輯。

覆寫(override) 是在子類別中定義一個與父類別同名的方法。

如果想在子類別擴充父類別的方法,可以先用 super.method() 呼叫父類別的方法,再加入子類別自己的內容:

class Student extends Person{
constructor(name, age, major){
super(name, age);
this.major = major;
}
greet(){ // 宣告同名方法 ⭢ 覆寫
// 在子類別中呼叫父類別的 greet() 方法
super.greet();
// 加入子類別自己的行為
console.log(`I'm a ${this.major} student!`);
}
}
const elaine = new Student("Elaine", 18, "Computer Science");
elaine.greet(); // Hi, I'm Elaine, 18 years old. I'm a Computer Science student!

總結

ES6 的 class 語法讓 JavaScript 看起來更傳統物件導向語言,但本質上仍然是基於 prototype 的繼承機制

  • class 本質上仍是 function
  • extends 建立的是 prototype chain
  • super() 的作用是初始化子類別的 this
  • super.method() 則是讓子類別可以在覆寫時保留父類別的邏輯
留言
avatar-img
Elaine 粼粼的林林總總
7會員
34內容數
不定期地分享程式/旅遊/學習/閱讀或各式各樣的文章,如果對我的分享有興趣,歡迎來找我玩~
2026/02/25
探討 JavaScript ES6 推出的 class 語法,其本質上是基於原型的語法糖。文章從建構函式概念出發,對比其與 class 的 constructor 差異,透過實際程式碼驗證 class 內部方法屬於原型物件。說明 class 作為 function 的特性以及其不會被提升的重要區別。
2026/02/25
探討 JavaScript ES6 推出的 class 語法,其本質上是基於原型的語法糖。文章從建構函式概念出發,對比其與 class 的 constructor 差異,透過實際程式碼驗證 class 內部方法屬於原型物件。說明 class 作為 function 的特性以及其不會被提升的重要區別。
2026/02/24
本文探討 JavaScript 中的原型 (prototype) 與原型鏈 (prototype chain),解釋物件如何從原型繼承屬性與方法,以及屬性查找機制。說明建構函式 與 new 如何利用原型建立共用方法,達到程式碼重用與節省記憶體的效果。
2026/02/24
本文探討 JavaScript 中的原型 (prototype) 與原型鏈 (prototype chain),解釋物件如何從原型繼承屬性與方法,以及屬性查找機制。說明建構函式 與 new 如何利用原型建立共用方法,達到程式碼重用與節省記憶體的效果。
2026/02/23
JavaScript 的 this 總是讓人困惑嗎? 本文詳細解析 5 大綁定規則 (預設、隱式、new、顯式、DOM 事件),包含 call/apply/bind 方法借用、setTimeout 經典陷阱,以及箭頭函式如何完美解決 this 問題。
Thumbnail
2026/02/23
JavaScript 的 this 總是讓人困惑嗎? 本文詳細解析 5 大綁定規則 (預設、隱式、new、顯式、DOM 事件),包含 call/apply/bind 方法借用、setTimeout 經典陷阱,以及箭頭函式如何完美解決 this 問題。
Thumbnail
看更多
你可能也想看
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
練習目標 這篇是我的前端練習記錄,透過 CodePen 製作一個小功能:「點一下按鈕,就讓整個畫面換個背景色」。 這個練習適合剛開始學習 HTML、CSS、JavaScript 的人,幫助理解: 按鈕怎麼綁定事件 JavaScript 怎麼控制畫面樣式 如何產生隨機顏色 練習畫面預覽
Thumbnail
練習目標 這篇是我的前端練習記錄,透過 CodePen 製作一個小功能:「點一下按鈕,就讓整個畫面換個背景色」。 這個練習適合剛開始學習 HTML、CSS、JavaScript 的人,幫助理解: 按鈕怎麼綁定事件 JavaScript 怎麼控制畫面樣式 如何產生隨機顏色 練習畫面預覽
Thumbnail
這篇文章深入淺出地解釋 JavaScript 中表達式 (expression) 與陳述式 (statement) 的差異,並以 React 中 JSX 的應用為例,說明為何大括號 {} 內只能放入表達式。文章以類比人類語言的句子結構來幫助理解,並提供相關參考資料連結。
Thumbnail
這篇文章深入淺出地解釋 JavaScript 中表達式 (expression) 與陳述式 (statement) 的差異,並以 React 中 JSX 的應用為例,說明為何大括號 {} 內只能放入表達式。文章以類比人類語言的句子結構來幫助理解,並提供相關參考資料連結。
Thumbnail
iFrame在微前端架構中的優缺點,分析了其對用戶體驗、SEO及性能的影響。 iFrame在嵌入小型UI元件、創建隔離環境等特定場景中仍具備相當的應用價值。
Thumbnail
iFrame在微前端架構中的優缺點,分析了其對用戶體驗、SEO及性能的影響。 iFrame在嵌入小型UI元件、創建隔離環境等特定場景中仍具備相當的應用價值。
Thumbnail
本文介紹如何使用Vite建立前端開發初始檔案,並加入Tailwindcss的教學。透過指令和配置檔,讓你能快速建立個人專案的開發環境,並學習如何加入全域的Tailwindcss樣式。還有影片教學、資源連結和更多相關教學文章等,幫助你進一步學習。
Thumbnail
本文介紹如何使用Vite建立前端開發初始檔案,並加入Tailwindcss的教學。透過指令和配置檔,讓你能快速建立個人專案的開發環境,並學習如何加入全域的Tailwindcss樣式。還有影片教學、資源連結和更多相關教學文章等,幫助你進一步學習。
Thumbnail
為什麼要登出使用者? 安全性:防止未經授權的人,在使用者暫離時使用系統,這在公用或共享電腦的環境中尤其重要。 資料保護:只要使用者處於登入狀態,就會暴露在個人資料被他人操縱或利用的風險中,因此登出閒置使用者對資安也很重要。 如何在 Vue 3 專案中實作此功能?
Thumbnail
為什麼要登出使用者? 安全性:防止未經授權的人,在使用者暫離時使用系統,這在公用或共享電腦的環境中尤其重要。 資料保護:只要使用者處於登入狀態,就會暴露在個人資料被他人操縱或利用的風險中,因此登出閒置使用者對資安也很重要。 如何在 Vue 3 專案中實作此功能?
Thumbnail
這一集用最新的Vite工具去創建初始檔案。Vite用於創建和構建Web應用程序,具有快速的啟動時間、即時熱更新、小型體積、支持多種框架和可擴展性等優點。
Thumbnail
這一集用最新的Vite工具去創建初始檔案。Vite用於創建和構建Web應用程序,具有快速的啟動時間、即時熱更新、小型體積、支持多種框架和可擴展性等優點。
Thumbnail
隨著科技發展迅速,軟體職缺需求大增長,有些朋友對IT產業有興趣並想成為一位軟體工程師,但不知道從哪裡下手,透過傳統學校、培訓班或自學等不同方法,有多種學習路徑可以選擇。此外,還提供了一些額外資源教學連結,方便讀者進一步提升相關技能。
Thumbnail
隨著科技發展迅速,軟體職缺需求大增長,有些朋友對IT產業有興趣並想成為一位軟體工程師,但不知道從哪裡下手,透過傳統學校、培訓班或自學等不同方法,有多種學習路徑可以選擇。此外,還提供了一些額外資源教學連結,方便讀者進一步提升相關技能。
Thumbnail
在 2021 年的剛轉職成為前端工程師的時候,我在面試時滿常會被詢問到 JavaScript 中閉包的議題,當時候自己回答的滿差的,於是在 2022 年時,我寫了一系列的有關於函式程式設計鐵人賽的文章, 裡頭就有簡單提到有關於閉包的議題。
Thumbnail
在 2021 年的剛轉職成為前端工程師的時候,我在面試時滿常會被詢問到 JavaScript 中閉包的議題,當時候自己回答的滿差的,於是在 2022 年時,我寫了一系列的有關於函式程式設計鐵人賽的文章, 裡頭就有簡單提到有關於閉包的議題。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News