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 粼粼的林林總總
10會員
40內容數
不定期地分享程式/旅遊/學習/閱讀或各式各樣的文章,如果對我的分享有興趣,歡迎來找我玩~
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
這一集用最新的Vite工具去創建初始檔案。Vite用於創建和構建Web應用程序,具有快速的啟動時間、即時熱更新、小型體積、支持多種框架和可擴展性等優點。
Thumbnail
這一集用最新的Vite工具去創建初始檔案。Vite用於創建和構建Web應用程序,具有快速的啟動時間、即時熱更新、小型體積、支持多種框架和可擴展性等優點。
Thumbnail
在 2021 年的剛轉職成為前端工程師的時候,我在面試時滿常會被詢問到 JavaScript 中閉包的議題,當時候自己回答的滿差的,於是在 2022 年時,我寫了一系列的有關於函式程式設計鐵人賽的文章, 裡頭就有簡單提到有關於閉包的議題。
Thumbnail
在 2021 年的剛轉職成為前端工程師的時候,我在面試時滿常會被詢問到 JavaScript 中閉包的議題,當時候自己回答的滿差的,於是在 2022 年時,我寫了一系列的有關於函式程式設計鐵人賽的文章, 裡頭就有簡單提到有關於閉包的議題。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
這篇文章深入淺出地解釋 JavaScript 中表達式 (expression) 與陳述式 (statement) 的差異,並以 React 中 JSX 的應用為例,說明為何大括號 {} 內只能放入表達式。文章以類比人類語言的句子結構來幫助理解,並提供相關參考資料連結。
Thumbnail
這篇文章深入淺出地解釋 JavaScript 中表達式 (expression) 與陳述式 (statement) 的差異,並以 React 中 JSX 的應用為例,說明為何大括號 {} 內只能放入表達式。文章以類比人類語言的句子結構來幫助理解,並提供相關參考資料連結。
Thumbnail
本文介紹如何使用Vite建立前端開發初始檔案,並加入Tailwindcss的教學。透過指令和配置檔,讓你能快速建立個人專案的開發環境,並學習如何加入全域的Tailwindcss樣式。還有影片教學、資源連結和更多相關教學文章等,幫助你進一步學習。
Thumbnail
本文介紹如何使用Vite建立前端開發初始檔案,並加入Tailwindcss的教學。透過指令和配置檔,讓你能快速建立個人專案的開發環境,並學習如何加入全域的Tailwindcss樣式。還有影片教學、資源連結和更多相關教學文章等,幫助你進一步學習。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
隨著科技發展迅速,軟體職缺需求大增長,有些朋友對IT產業有興趣並想成為一位軟體工程師,但不知道從哪裡下手,透過傳統學校、培訓班或自學等不同方法,有多種學習路徑可以選擇。此外,還提供了一些額外資源教學連結,方便讀者進一步提升相關技能。
Thumbnail
隨著科技發展迅速,軟體職缺需求大增長,有些朋友對IT產業有興趣並想成為一位軟體工程師,但不知道從哪裡下手,透過傳統學校、培訓班或自學等不同方法,有多種學習路徑可以選擇。此外,還提供了一些額外資源教學連結,方便讀者進一步提升相關技能。
Thumbnail
練習目標 這篇是我的前端練習記錄,透過 CodePen 製作一個小功能:「點一下按鈕,就讓整個畫面換個背景色」。 這個練習適合剛開始學習 HTML、CSS、JavaScript 的人,幫助理解: 按鈕怎麼綁定事件 JavaScript 怎麼控制畫面樣式 如何產生隨機顏色 練習畫面預覽
Thumbnail
練習目標 這篇是我的前端練習記錄,透過 CodePen 製作一個小功能:「點一下按鈕,就讓整個畫面換個背景色」。 這個練習適合剛開始學習 HTML、CSS、JavaScript 的人,幫助理解: 按鈕怎麼綁定事件 JavaScript 怎麼控制畫面樣式 如何產生隨機顏色 練習畫面預覽
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
為什麼要登出使用者? 安全性:防止未經授權的人,在使用者暫離時使用系統,這在公用或共享電腦的環境中尤其重要。 資料保護:只要使用者處於登入狀態,就會暴露在個人資料被他人操縱或利用的風險中,因此登出閒置使用者對資安也很重要。 如何在 Vue 3 專案中實作此功能?
Thumbnail
為什麼要登出使用者? 安全性:防止未經授權的人,在使用者暫離時使用系統,這在公用或共享電腦的環境中尤其重要。 資料保護:只要使用者處於登入狀態,就會暴露在個人資料被他人操縱或利用的風險中,因此登出閒置使用者對資安也很重要。 如何在 Vue 3 專案中實作此功能?
Thumbnail
iFrame在微前端架構中的優缺點,分析了其對用戶體驗、SEO及性能的影響。 iFrame在嵌入小型UI元件、創建隔離環境等特定場景中仍具備相當的應用價值。
Thumbnail
iFrame在微前端架構中的優缺點,分析了其對用戶體驗、SEO及性能的影響。 iFrame在嵌入小型UI元件、創建隔離環境等特定場景中仍具備相當的應用價值。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News