原因:衍生出的建構子不會創造新的this對象,也就是子類別沒有自己的this;只有透過super()把基底類別(父類別)建立好的this物件接下來,衍生類別才能像基底類別一樣使用this來產生物件的屬性。
本教學操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。
在學習ES6 class繼承時往往提到一個關鍵點
一個子類別SubClass 繼承父類別SuperClass 的建構器constructor時有兩個需求:
-
#1)必須在建構器呼叫super( )。
2) this必須寫在super( )之後。
第一點是為了解決父類別子類別的歧義,確定了
「子類別沒有自己的 this
」這個概念
子類別和父類別是個相對的概念,因為一個類別可以既是子類別也是父類,所以ES6裡用的是絕對的概念:基底類別和衍生類別。而且這個概念是針對所有建構函式說的,JS 裡的建構子要嘛是基底的,要嘛就是衍生的。
ES6中,我們隨手寫的建構子(function)都是基底類,基底類別可以直接用this來指向呼叫它所在方法的物件。
咱自己給this總結了一句話:誰調用了this,this就指向誰。
function Super(name) { this.name = name; SuperFactory.prototype.sayHi = function () { console.log("Hi"); } } let super = new Super("peter");//通过new创建了新的对象,Super()中的this即指向这个对象
ES6中的衍生類,就是extend的class。 衍生出的建構子不會創造新的<span style="background-color:#ffd900;">this</span>
#物件<span style="background-color:#ffd900;">(或說this指向的物件</span>
(這裡可以回顧一下new關鍵字做的事情)
,就是所說的"子類別沒有自己的this"。只有透過<span style="background-color:#ffd900;">super()</span>
把基底類別建立好的this物件接下來,衍生類別才能像基底類別一樣使用this來生成物件的屬性。
class SuperClass { //基类 not父类 constructor(name) { this.name = name; } sayHi() { console.log("Hi"); } }; class SubClass extends SuperClass {//派生类 not子类 constructor(name,age) { surpe(name); this.age = age; } sayNo() { console.log("NO"); } }; let subinst = new subClass('tom',18); subinst.sayHi();//Hi subinst.sayNo();//NO
那this為什麼必須寫在super( )之後
#是為了避免一個程式碼陷阱。
class Person { constructor(name) { this.name = name; } } class PolitePerson extends Person { constructor(name) { this.greetColleagues(); // 这里不允许我们使用this,下面解释 super(name); } greetColleagues() { alert('Good morning folks!'); } }
上面的例子假設呼叫super( )之前允許使用this, 一段時間後為了滿足一些需求,我們在greetColleagues( ) 中加入:
greetColleagues() { alert('Good morning folks!'); alert('My name is ' + this.name + ', nice to meet you!'); }
但是我們忘了,this.greetColleagues( ) 在super( )呼叫之前,this.name根本都沒有定義,程式碼會拋錯,像這樣的程式碼可能很難想到什麼時候發生。
因此,為了避免這個陷阱,JavaScript 強制要求在constructor 中使用this 之前,必須先呼叫super。
【相關推薦:javascript影片教學、程式設計影片】
以上是es6的class繼承為什麼要呼叫super的詳細內容。更多資訊請關注PHP中文網其他相關文章!

React是構建現代前端應用的JavaScript庫。 1.它採用組件化和虛擬DOM優化性能。 2.組件使用JSX定義,狀態和屬性管理數據。 3.Hooks簡化生命週期管理。 4.使用ContextAPI管理全局狀態。 5.常見錯誤需調試狀態更新和生命週期。 6.優化技巧包括Memoization、代碼拆分和虛擬滾動。

React的未來將專注於組件化開發的極致、性能優化和與其他技術棧的深度集成。 1)React將進一步簡化組件的創建和管理,推動組件化開發的極致。 2)性能優化將成為重點,特別是在大型應用中的表現。 3)React將與GraphQL和TypeScript等技術深度集成,提升開發體驗。

React是用於構建用戶界面的JavaScript庫,其核心思想是通過組件化構建UI。 1.組件是React的基本單位,封裝UI邏輯和样式。 2.虛擬DOM和狀態管理是組件工作的關鍵,狀態通過setState更新。 3.生命週期包括掛載、更新和卸載三個階段,合理使用可優化性能。 4.使用useState和ContextAPI管理狀態,提高組件復用性和全局狀態管理。 5.常見錯誤包括狀態更新不當和性能問題,可通過ReactDevTools調試。 6.性能優化建議包括使用memo、避免不必要的重新渲染、使用us

在React中使用HTML渲染組件和數據可以通過以下步驟實現:使用JSX語法:React使用JSX語法將HTML結構嵌入JavaScript代碼中,編譯後操作DOM。組件與HTML結合:React組件通過props傳遞數據,動態生成HTML內容,如。數據流管理:React的數據流是單向的,從父組件傳遞到子組件,確保數據流動可控,如App組件傳遞name到Greeting。基本用法示例:使用map函數渲染列表,需添加key屬性,如渲染水果列表。高級用法示例:使用useState鉤子管理狀態,實現動

React是構建單頁面應用(SPA)的首選工具,因為它提供了高效、靈活的用戶界面構建方式。 1)組件化開發:將復雜UI拆分成獨立、可複用的部分,提高可維護性和復用性。 2)虛擬DOM:通過比較虛擬DOM與實際DOM的差異,優化渲染性能。 3)狀態管理:通過狀態和屬性管理數據流,確保數據的一致性和可預測性。

React是由Meta開發的用於構建用戶界面的JavaScript庫,其核心是組件化開發和虛擬DOM技術。 1.組件與狀態管理:React通過組件(函數或類)和Hooks(如useState)管理狀態,提升代碼重用性和維護性。 2.虛擬DOM與性能優化:通過虛擬DOM,React高效更新真實DOM,提升性能。 3.生命週期與Hooks:Hooks(如useEffect)讓函數組件也能管理生命週期,執行副作用操作。 4.使用示例:從基本的HelloWorld組件到高級的全局狀態管理(useContext和

React生態系統包括狀態管理庫(如Redux)、路由庫(如ReactRouter)、UI組件庫(如Material-UI)、測試工具(如Jest)和構建工具(如Webpack)。這些工具協同工作,幫助開發者高效開發和維護應用,提高代碼質量和開發效率。

React是由Facebook開發的用於構建用戶界面的JavaScript庫。 1.它採用組件化和虛擬DOM技術,提高了UI開發的效率和性能。 2.React的核心概念包括組件化、狀態管理(如useState和useEffect)和虛擬DOM的工作原理。 3.在實際應用中,React支持從基本的組件渲染到高級的異步數據處理。 4.常見錯誤如忘記添加key屬性或不正確的狀態更新可以通過ReactDevTools和日誌調試。 5.性能優化和最佳實踐包括使用React.memo、代碼分割和保持代碼的可讀性與可維


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6
視覺化網頁開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1
強大的PHP整合開發環境