javascript 中用apply實現類的繼承

在網上看到一段關於用apply方法實現js類中的繼承。代碼 如下

在子類的構造函數中,對父類的構造函數應用apply方法,就可以實現繼承。很像Java,c++中的繼承---在子類的構造函數中調用父類的構造函數。

在調用Derive類的ChineseName屬性時,Derive類是沒有這個屬性的(被註釋掉了),程序沒有出現異常,顯示的是Base類的ChineseName屬性值。

在調用Derive類的BaseMethod方法時,也是調用繼承Base類的BaseMethod方法。apply方法都知道是改變調用函數的上下文,也就是函數中的隱含參數---this。這樣的話,調用Derive類的BaseMethod方法時,函數內部用到了“this.ChineseName ”。此時的“this”,是否已經指向Derive類的對象--O,應該是,但Derive類沒有 ChineseName屬性,程序顯示的是Base類ChineseName屬性值,當在

Derive類內增加 ChineseName屬性後,程序可以顯示Derive類的對象的 ChineseName屬性,這也就很像高級語言中的繼承特性了,

子類中有的,用子類的,沒有的就用父類的。

 

但在這有個前提,就是Base.call(this, EnglishName)要放在Derive類構造函數的前面(最好第一行)。如果將Base.call(this, EnglishName)放在Derive類ChineseName屬性後,即使子類中有這個屬性,也不會顯示還是現實父類的同名屬性。

 

可能解釋是,在子類的構造函數中以apply方式調用父類的構造函數。那麼子類就可以繼承父類的屬性,方法。但子類和父類中的屬性會因爲順序而相互覆蓋。所以要做到“子類中有的,用子類的,沒有的就用父類的”這點,就把父類的構造的函數儘量放在子類構造函數內部的前面。

發佈了38 篇原創文章 · 獲贊 11 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章