js 繼承使用不難,要說清楚,須要本身必定總結,才能說清楚。javascript
es5 的繼承方式有不少種,這個是 js 語言自己形成,可是類實現繼承以後的功能,有以下 3 條:java
es5 繼承最主要的原型式繼承方法,這個函數步驟分爲 4 步驟:app
Fn.prototype = Super.prototype
。var fn = new Fn()
,將 Child.prototype = fn
。Child.prototype.constructor = Child
。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
明白上面一種方式,其餘幾種方法,就很容易理解。prototype
子類只繼父類構造函數裏的屬性,不繼承原型code
子類原型上繼承父類全部定義屬性,若是子類能夠自定義繼承構造函數裏的屬性blog