es5原型式繼承簡解

1. 原型式繼承方法

js 繼承使用不難,要說清楚,須要本身必定總結,才能說清楚。javascript

es5 的繼承方式有不少種,這個是 js 語言自己形成,可是類實現繼承以後的功能,有以下 3 條:java

  1. 子類繼承父類,主要繼承父類的原型上的屬性和方法,和能夠自定義子類繼承父類的構造函數裏的屬性和方法
  2. 重寫子類原型的屬性和方法時,父類的原型的屬性和方法不會更改
  3. 子類沒有重寫繼承父類屬性和方法,父類重寫子類繼承父類的屬性和方法時,子類的原型上的屬性和方法也會跟着重寫

es5 繼承最主要的原型式繼承方法,這個函數步驟分爲 4 步驟:app

  1. 建立一箇中間的構造函數Fn,Fn.prototype = Super.prototype
  2. 實例化 Fn 爲 var fn = new Fn(),將 Child.prototype = fn
  3. Child.prototype.constructor = Child
  4. Child 構造函數中封裝一個 super 方法,來繼承父類裏的構造函數。

ps:固然步驟 1 和 2 可用 Object.create() 來替代。函數

代碼以下:this

function extends (Sup, Sub) {
    // var Fn = function () {}
    // Fn.prototype = Sup.prototype
    // var fn = new Fn()
    // Sub.prototype = fn
    Sub.prototype = Object.cteate(Sup.prototpye)
    Sub.prototype.constructor = Sub
}

function super (Sup) {
    var args = []
    if (arguments.length > 1) {
        args = Array.protoype.slice.call(arguments, 1)
    }
    Sup.apply(this, args)
}
function Sup (name) {
    this.name = name
}
function Sub (name) {
    super(Sup, name)
}

extends(Sup, Sub)

內存分析:es5

2. 其餘繼承方式

明白上面一種方式,其餘幾種方法,就很容易理解。prototype

借用構造函數

子類只繼父類構造函數裏的屬性,不繼承原型code

組合繼承

子類原型上繼承父類全部定義屬性,若是子類能夠自定義繼承構造函數裏的屬性blog

其餘,略

相關文章
相關標籤/搜索