首頁 web前端 前端問答 es6繼承和es5繼承的差別是什麼

es6繼承和es5繼承的差別是什麼

Sep 03, 2021 pm 04:08 PM
es5 es6 繼承

es5和es6繼承的區別: ES5的繼承是透過原型或建構函數機制實現的;它先創建子類,再實例化父類並添加到子類this中。 ES6先建立父類,再實例化子集中透過呼叫super方法存取父級後,再透過修改this實作繼承。

es6繼承和es5繼承的差別是什麼

本教學操作環境:windows7系統、ECMAScript 5&&ECMAScript 6版、Dell G3電腦。

es6繼承和es5繼承的區別

  • #ES5的繼承實質上是先創建子類別的實例對象,然後再將父類別的方法加入this上(Parent.apply(this)).

  • ES6的繼承機製完全不同,實質上是先建立父類別的實例物件this(所以必須先呼叫父類別的super()方法),然後再用子類別的建構子修改this。

  • ES5的繼承是透過原型或建構子機制來實現。

  • ES6透過class關鍵字定義類,裡面有建構方法,類別之間透過extends關鍵字實作繼承。子類別必須在constructor方法中呼叫super方法,否則新實例報錯。因為子類別沒有自己的this對象,而是繼承了父類別的this對象,然後對其進行加工。如果不呼叫super方法,子類別就得不到this物件。

注意super關鍵字指父類別的實例,也就是父類別的this物件。

注意:子類別建構子中,呼叫super後,才可使用this關鍵字,否則報錯。

1、在es5中的繼承:

	function parent(a,b){
	    this a = a;
	    this b = b;
	}
	function child(c){
	    this c = c
	};
登入後複製

透過子集去繼承父級:

parent.call(child,1,2)
登入後複製

而去看call的底層方法可知,繼承的過程是透過prototype屬性

child.prototype = new parent(1,2);
登入後複製

由此可知,ES5繼承的實質是先創建了子類元素child的的實例對象,然後再把父類元素parent的原型對像中的屬性賦值給子類別元素child的實例物件裡面,從而實現繼承

2、ES6中的繼承

在傳統JS中,生成物件是透過建立建構函數,然後定義生成物件

function parent(a,b){
    this.a = a;
    this.b = b;
}
登入後複製

然後透過prototype增加對應所需方法或屬性

parent.prototype.methods = function(){
    return 'this is test methods';
}
parent.prototype.attr = 'this is test attr‘;
登入後複製

而ES6中引入了類別的概念,也就是class。透過關鍵字class去定義物件。

class是個關鍵字,語言糖,這樣能更清晰的讀取所創建的物件,

#透過屬性constructor來接收控制方法傳入的參數,如果不寫這個屬性,預設是沒有參數的

class parent{
    curstructor(a,b){
        this.a = a;
        this.b = b;
    }
}
登入後複製

ES6中的繼承是基於class類別之間繼承的。透過關鍵字extends實現。

透過super實例化呼叫父類別

	class parent{
	  constructor(a,b){
	    this.a = a;
	    this.b = b;
	  }
	  parentMethods(){
	    return this.a + this.b
	  }
	}
	class child extends parent{
	  constructor(a,b,c){
	    super(a,b);
	    this.c = c;
	  }
	  childMethods(){
	    return this.c + ',' + super.parentMethods()
	  }
	}
	const point = new child(1,2,3);
	alert(point.childMethods());
登入後複製

上面的程式碼,是一套簡單的ES6父子類別繼承。

相信已經看出來了,雖明顯的差異就是在於ES6中,啟動父元件的是super方法,而不是新建實例化,也就是說,父類別的實例物件是先創建出來的,呼叫後,再去修改子類別的建構子中的this完善原型物件。

總結:

ES5和ES6繼承最大的差別就是在於:

  • ES5先建立子類,在實例化父類別並加入到子類別this中

  • ES6先建立父類,在實例化子集中透過呼叫super方法存取父級後,在透過修改this實作繼承

【推薦學習:javascript影片教學

以上是es6繼承和es5繼承的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1653
14
CakePHP 教程
1413
52
Laravel 教程
1306
25
PHP教程
1251
29
C# 教程
1224
24
C++ 函式繼承詳解:如何在繼承中使用「基底類別指標」和「衍生類別指標」? C++ 函式繼承詳解:如何在繼承中使用「基底類別指標」和「衍生類別指標」? May 01, 2024 pm 10:27 PM

在函數繼承中,使用「基底類別指標」和「衍生類別指標」來理解繼承機制:基底類別指標指向派生類別物件時,執行向上轉型,只存取基底類別成員。派生類別指標指向基底類別物件時,執行向下轉型(不安全),必須謹慎使用。

C++ 函式繼承詳解:如何偵錯繼承中出現的錯誤? C++ 函式繼承詳解:如何偵錯繼承中出現的錯誤? May 02, 2024 am 09:54 AM

繼承錯誤調試技巧:確保正確的繼承關係。使用偵錯器逐步執行程式碼,檢查變數值。確保正確使用virtual修飾符。檢查隱藏的繼承帶來的菱形繼承問題。檢查抽象類別中未實現的純虛函數。

解決PHP報錯:繼承父類別時遇到的問題 解決PHP報錯:繼承父類別時遇到的問題 Aug 17, 2023 pm 01:33 PM

解決PHP報錯:繼承父類別時遇到的問題在PHP中,繼承是重要的物件導向程式設計的特性。透過繼承,我們能夠重複使用現有的程式碼,並且能夠在不修改原有程式碼的情況下,對其進行擴展和改進。儘管繼承在開發中應用廣泛,但有時在繼承父類別時可能會遇到一些報錯問題,本文將圍繞解決繼承父類別時遇到的常見問題進行討論,並提供相應的程式碼範例。問題一:未找到父類別在繼承父類別的過程中,如果系統無

C++ 函式繼承詳解:如何理解繼承中的「is-a」與「has-a」關係? C++ 函式繼承詳解:如何理解繼承中的「is-a」與「has-a」關係? May 02, 2024 am 08:18 AM

C++函式繼承詳解:掌握「is-a」和「has-a」關係什麼是函式繼承?函數繼承是C++中一種將衍生類別中定義的方法與基底類別中定義的方法關聯起來的技術。它允許衍生類別存取和重寫基底類別的方法,從而擴展了基底類別的功能。 「is-a」和「has-a」關係在函數繼承中,「is-a」關係指派生類別是基底類別的子類型,也就是說,衍生類別「繼承」了基底類別的特性和行為。 「has-a」關係指派生類別包含對基底類別物件的參考或指針,也就是說,衍生類別「擁有」了基底類別物件。語法以下是如何實作函數繼承的語法:classDerivedClass:pu

使用繼承的Java程式來計算定期存款(FDs)和定期存款(RDs)的利息 使用繼承的Java程式來計算定期存款(FDs)和定期存款(RDs)的利息 Aug 20, 2023 pm 10:49 PM

繼承是一個概念,它允許我們從一個類別存取另一個類別的屬性和行為。被繼承方法和成員變數的類別稱為超類別或父類,而繼承這些方法和成員變數的類別稱為子類別或子類別。在Java中,我們使用「extends」關鍵字來繼承一個類別。在本文中,我們將討論使用繼承來計算定期存款和定期存款的利息的Java程式。首先,在您的本機機器IDE中建立這四個Java檔案-Acnt.java−這個檔案將包含一個抽象類別‘Acnt’,用於儲存帳戶詳情,如利率和金額。它還將具有一個帶有參數‘amnt’的抽象方法‘calcIntrst’,用於計

如何在PHP中使用多態性和繼承來處理資料類型 如何在PHP中使用多態性和繼承來處理資料類型 Jul 15, 2023 pm 07:41 PM

如何在PHP中使用多態性和繼承來處理資料類型引言:在PHP中,多型和繼承是兩個重要的物件導向程式設計(OOP)概念。透過使用多型和繼承,我們可以更靈活地處理不同的資料類型。本文將介紹如何在PHP中使用多態性和繼承來處理資料類型,並透過程式碼範例展示它們的實際應用。一、繼承的基本概念繼承是物件導向程式設計中的重要概念,它允許我們建立一個類,該類別可以繼承父類別的屬性和方法

如何使用Java強制繼承代理final類別? 如何使用Java強制繼承代理final類別? Sep 06, 2023 pm 01:27 PM

如何使用Java強制繼承代理final類別?在Java中,final關鍵字用於修飾類別、方法和變量,表示它們不可被繼承、重寫和修改。然而,在某些情況下,我們可能需要強制繼承一個final類,以實現特定的需求。本文將討論如何使用代理模式來實現這樣的功能。代理模式是一種結構型設計模式,它允許我們建立一個中間物件(代理物件),該物件可以控制對另一個物件(被代理物件)的

PHP中的封裝技術及應用 PHP中的封裝技術及應用 Oct 12, 2023 pm 01:43 PM

PHP中的封裝技術及應用封裝是物件導向程式設計中的重要概念,它指的是將資料和資料的操作封裝在一起,以便提供對外部程式的統一存取介面。在PHP中,封裝可以透過存取控制修飾符和類別的定義來實現。本文將介紹PHP中的封裝技術及其應用場景,並提供一些具體的程式碼範例。一、封裝的存取控制修飾符在PHP中,封裝主要透過存取控制修飾符來實現。 PHP提供了三個存取控制修飾符,

See all articles