ES6 Class 中的 super 關鍵字詳解
收藏整理了ES6 Class 中的 super 關鍵字,本文將分享給大家,非常不錯,具有參考借鑒價值,需要的朋友參考下吧,希望能幫助到大家。
以下只是個人的學習筆記:
super這個關鍵字,既可以當作函數使用,也可以當作物件使用。在這兩種情況下,它的用法完全不同。
1、當作函數使用
1 2 3 4 5 6 |
|
注意,super雖然代表了父類別A的建構函數,但是傳回的是子類別B的實例,即super內部的this指的是B,因此super()在這裡相當於A.prototype.constructor.call(this)。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
可以看到,在super()執行時,它指向的是子類別B的建構函數,而不是父類別A的建構子。也就是說,super()內部的this指向的是B。
2、當作物件使用
在普通方法中,指向父類別的原型物件;在靜態方法中,指向父類別。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
上面程式碼中,子類別B當中的super.c(),就是將super當作一個物件使用。這時,super在普通方法之中,指向A.prototype,所以super.c()就相當於A.prototype.c()。
透過super呼叫父類別的方法時,super會綁定子類別的this。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
上面程式碼中,super.s()雖然呼叫的是A.prototype.s(),但是A.prototype.s()會綁定子類B的this,導致輸出的是2,而不是1。也就是說,實際上執行的是super.s.call(this)。
由於綁定子類別的this,所以如果透過super對某個屬性賦值,這時super就是this,賦值的屬性會變成子類別實例的屬性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
上面程式碼中,super.x賦值為3,這時等同於對this.x賦值為3。而當讀取super.x的時候,讀的是A.prototype.x,所以回傳undefined。
注意,使用super的時候,必須明確指定是作為函數、還是物件使用,否則會報錯。
1 2 3 4 5 6 7 |
|
上面程式碼中,console.log(super)當中的super,無法看出是作為函數使用,還是作為物件使用,所以JavaScript 引擎解析程式碼的時候就會報錯。這時,如果能清楚顯示super的資料類型,就不會報錯。
最後,由於物件總是繼承其他物件的,所以可以在任一個物件中,使用super關鍵字。
相關推薦:
詳解Laravel實作supervisor執行非同步進程的方法
#以上是ES6 Class 中的 super 關鍵字詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

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

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

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

類別和方法的概念和實例類別(Class):用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所共有的屬性和方法。物件是類別的實例。方法:類別中定義的函數。類別的建構方法__init__():類別有一個名為init()的特殊方法(建構方法),該方法在類別實例化時會自動呼叫。實例變數:在類別的宣告中,屬性是用變數來表示的,這種變數就稱為實例變量,實例變數就是用self修飾的變數。實例化:建立一個類別的實例,類別的具體物件。繼承:即一個派生類別(derivedclass)繼承基底類別(baseclass)的

class是python中的一個關鍵字,用來定義一個類,定義類別的方法:class後面加一個空格然後加類名;類名規則:首字母大寫,如果多個單字用駝峰命名法,如【class Dog()】。

深入解析C語言中static關鍵字的功能和用法在C語言中,static是一種非常重要的關鍵字,它可以被用於函數、變數和資料類型的定義。使用static關鍵字可以改變物件的連結屬性、作用域和生命週期,以下就來詳細解析一下static關鍵字在C語言中的作用和用法。 static變數與函數:在函數內部使用static關鍵字定義的變數稱為靜態變量,它具有全域生命週

本站1月6日消息,技嘉的RTX4080SUPER、RTX4070TiSUPER和RTX4070SUPER顯示卡已經曝光,預計1月9日0點發布。如上圖所示,英偉達RTX40SUPER顯示卡的logo發生了變化,SUPER全大寫,而RTX20系列的則是小寫的super。 RTX20superlogo本站總RTX40SUPER顯示卡爆料規格及價格如下:RTX4080SUPER配備10240CUDA核心及16GB23Gbps256bitGDDR6X顯存,999美元(目前約7153元人民幣)或1199美元(目前

jQuery是一種經典的JavaScript庫,被廣泛應用於網頁開發中,它簡化了在網頁上處理事件、操作DOM元素和執行動畫等操作。在使用jQuery時,常會遇到需要取代元素的class名稱的情況,本文將介紹一些實用的方法,以及具體的程式碼範例。 1.使用removeClass()和addClass()方法jQuery提供了removeClass()方法來刪除

在編寫PHP程式碼時,使用類別(Class)是一個非常常見的做法。透過使用類,我們可以將相關的功能和資料封裝在一個單獨的單元中,使程式碼更加清晰、易於閱讀和易於維護。本文將詳細介紹PHPClass的用法,並提供具體的程式碼範例,幫助讀者更好地理解如何在實際專案中應用類別來優化程式碼。 1.建立和使用類別在PHP中,可以使用關鍵字class來定義一個類,並在類別中定義屬性和方法。

Vue報錯:無法正確使用v-bind綁定class和style,怎麼解決?在Vue開發中,我們常常會用到v-bind指令來動態綁定class和style,但是有時候我們可能會遇到一些問題,如無法正確使用v-bind綁定class和style。在本篇文章中,我將為你解釋這個問題的原因,並提供解決方案。首先,讓我們先來了解v-bind指令。 v-bind用於將V
![解決'[Vue warn]: v-bind:class/ :class”錯誤的方法](https://img.php.cn/upload/article/000/465/014/169300902772563.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
解決「[Vuewarn]:v-bind:class/:class」錯誤的方法在使用Vue開發過程中,我們常常會遇到一些錯誤提示,其中一個常見的錯誤就是「[Vuewarn]:v-bind:class /:class”錯誤。這個錯誤提示通常出現在我們使用v-bind:class或:class屬性時,表示Vue無法正確解析我們設定的class值。那麼,如
