20class的繼承

復習

沒有class和extends,使用混合繼承

function Parent(name) {}
function Son(name,age) {
  // 一: 調用父類
  Parent.call(this,name)
  this.age = age
}
// 二:繼承原型上方法 --- 不需要參數
Son.prototype = new Parent()

介紹

  1. 使用關鍵字extends
  2. 子類的constructor必須要調用super

原型

  1. js中的繼承依舊是基于prototype
  2. 對子類使用Object.getPrototypeOf(SubClass)的到是父類

super 關鍵字

  1. super作為函數
  • 只能在構造函數中使用
  • super(param)相當于Parent.prototype.constructor.call(Son,param)
  1. super作為對象
  • 在非靜態方法中,super指的是父類原型
  • 在靜態方法中,super指的是父類
  • 通過super對象,調用父類方法,方法中的this綁定子類的this
  1. console.log(super)報錯,因為無法判斷super是對象還是函數
  2. 對象總是繼承對象,對象中可以直接使用super

兩條繼承鏈

  1. Son.__proto__ == Parent
  2. Son.prototype.__proto__ == Parent.prototype
  3. 子類實例原型的原型指向父類實例的原型p1.__proto__.__proto__ = p2.__proto__

原生構造函數的繼承

原生構造函數大致有,String,Number,Boolean,Array,Date,Function,Object,RegExp

  1. es5中不允許繼承原生構造函數,即使使用“混合繼承”的方式,新生成的類不會有原生構造函數的行為
  2. es6中允許繼承原生構造函數
  3. 在繼承Object類的時候有行為差異,無法通過super方法向父類Object傳參
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • class的基本用法 概述 JavaScript語言的傳統方法是通過構造函數,定義并生成新對象。下面是一個例子: ...
    呼呼哥閱讀 4,129評論 3 11
  • 本文先對es6發布之前javascript各種繼承實現方式進行深入的分析比較,然后再介紹es6中對類繼承的支持以及...
    lazydu閱讀 16,727評論 7 44
  • 面向對象的語言都有一個類的概念,通過類可以創建多個具有相同方法和屬性的對象,ES6之前并沒有類的概念,在ES6中引...
    Erric_Zhang閱讀 1,132評論 1 4
  • 昨天晚上,很晚了,一個長沙的朋友打電話給我,聊天間,得知,她深夜從長沙趕到我們這三線城市,是因為她的好友,結腸癌需...
    山谷里的樹閱讀 723評論 2 3
  • 打開設置 - 通用,屏幕的左上角箭頭那里會有三個小黑點一閃而過。 下拉通知欄,點編輯,然后迅速上劃通知欄,再下拉通...
    醉了君莫笑閱讀 318評論 1 3