兩圖看懂ES5和ES6中的繼承

作者:KeenWon
原文地址:http://keenwon.com/1524.html

Javascript中的繼承一直是個比較麻煩的問題,prototypeconstructor__proto__在構造函數,實例和原型之間有的復雜的關系,不仔細捋下很難記得牢固。ES6中又新增了classextends,和ES5攪在一起,加上平時很少自己寫繼承,簡直亂成一鍋粥。不過還好,畫個圖一下就清晰了,下面不說話了,直接上圖,上代碼。

ES5

ES5中的繼承,看圖:

function Super() {}
 
function Sub() {}
Sub.prototype = new Super();
Sub.prototype.constructor = Sub;
 
var sub = new Sub();
 
Sub.prototype.constructor === Sub; // ② true
sub.constructor === Sub; // ④ true
sub.__proto__ === Sub.prototype; // ⑤ true
Sub.prototype.__proto__ == Super.prototype; // ⑦ true

ES5中這種最簡單的繼承,實質上就是將子類的原型設置為父類的實例。

ES6

ES6中的繼承,看圖:

class Super {}
 
class Sub extends Super {}
 
var sub = new Sub();
 
Sub.prototype.constructor === Sub; // ② true
sub.constructor === Sub; // ④ true
sub.__proto__ === Sub.prototype; // ⑤ true
Sub.__proto__ === Super; // ⑥ true
Sub.prototype.__proto__ === Super.prototype; // ⑦ true

所以ES6和ES5的繼承是一模一樣的,只是多了classextends,ES6的子類和父類,子類原型和父類原型,通過__proto__連接。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在ES5繼承的實現非常有趣的,由于沒有傳統面向對象類的概念,Javascript利用原型鏈的特性來實現繼承,這其中...
    Daguo閱讀 25,936評論 10 44
  • class的基本用法 概述 JavaScript語言的傳統方法是通過構造函數,定義并生成新對象。下面是一個例子: ...
    呼呼哥閱讀 4,129評論 3 11
  • 本文先對es6發布之前javascript各種繼承實現方式進行深入的分析比較,然后再介紹es6中對類繼承的支持以及...
    lazydu閱讀 16,727評論 7 44
  • 面向對象的語言都有一個類的概念,通過類可以創建多個具有相同方法和屬性的對象,ES6之前并沒有類的概念,在ES6中引...
    Erric_Zhang閱讀 1,143評論 1 4
  • 2017年年初給自己定了個小目標,就是要看完50本書,也不知道能不能完成,但是一直再堅持看,到現在完成了還是很驚喜...
    不能如約而至的落葉閱讀 793評論 0 10