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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章