begin: 20170702
version: 20170724
1. 創(chuàng)建對象
2. 繼承
1)原型鏈
將超類型實例直接作為子類型的原型對象
-
優(yōu)點
子類型實例可以在原型鏈中找到所有超類型的屬性和方法。 -
缺陷
- 超類型包含引用類型值屬性時,會出現(xiàn)問題
- 子類型實例無法獨立向超類型構造函數(shù)傳遞參數(shù)
2)借用構造函數(shù)
在子類型構造函數(shù)內(nèi)部,將this(調用子類型構造函數(shù)時它指代子類型實例)作為環(huán)境對象用call方法調用超類型構造函數(shù)。
-
優(yōu)點
屬性都被定義在實例中,可以向超類型構造函數(shù)傳遞參數(shù) -
缺陷
- 不能實現(xiàn)函數(shù)復用
- 超類型原型中的方法對子類型實例不可見,結果所有引用類型都只能使用構造函數(shù)模式來創(chuàng)建
3)組合繼承
借用構造函數(shù)讓超類型屬性直接定義在子類型實例中;用原型鏈繼承超類型的方法。
-
優(yōu)點
結合了原型鏈和借用構造函數(shù)的優(yōu)點 -
缺陷
超類型構造函數(shù)被兩次調用,子類型實例的原型中同時含有超類型的屬性
4)原型式繼承
定義一個對象創(chuàng)建函數(shù),將基礎對象傳入,函數(shù)內(nèi)部創(chuàng)建一個新對象,該新對象以傳入的基礎對象為原型對象。
-
優(yōu)點
基于對象而不是基于構造函數(shù)建立新對象
5)寄生式繼承
借鑒原型式繼承的思路,定義一個對象創(chuàng)建函數(shù),函數(shù)接收一個基礎對象,基于它創(chuàng)建一個新對象(比如利用原型式繼承來創(chuàng)建),然后對新對象增強后返回。
-
優(yōu)點
基于對象創(chuàng)建功能增強的新對象
6)寄生組合式繼承
對組合式繼承加以改進:基于超類型的原型對象,利用寄生式繼承創(chuàng)建一個新對象,用這個新對象代替超類型的實例作為子類型的原型對象。
-
優(yōu)點
在組合式繼承中,我們繼承方法時實際上只需要超類型的原型對象,我們可以借用寄生繼承;避免對超類型構造函數(shù)的二次調用,子類型實例中不再出現(xiàn)超類型屬性。