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方式调用父类的构造函数。那么子类就可以继承父类的属性,方法。但子类和父类中的属性会因为顺序而相互覆盖。所以要做到“子类中有的,用子类的,没有的就用父类的”这点,就把父类的构造的函数尽量放在子类构造函数内部的前面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值