You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中this指向父类的原理及继承代码解析疑问

关于JavaScript继承中this指向的答疑

首先要告诉你:你的理解完全正确! 能梳理出这样完整的调用链路,说明你已经抓住了JavaScript继承和this关键字的核心逻辑,非常棒👍

接下来针对你的两个疑问逐一解答:

问题1:步骤2中,this.xxx()和this.zzz()为何会指向父类?

这里的关键要记住:this永远指向当前执行代码的对象实例,而方法的查找是沿着实例的原型链从下往上进行的——优先找自身类定义的方法,找不到就去父类找,以此类推。

  • 对于this.xxx():你的实例c是CCC的对象,而CCC类并没有重写xxx()方法,所以会沿着原型链往上找,找到它的直接父类BBB(BBB里定义了xxx()),因此调用BBB.xxx()。
  • 对于this.zzz():CCC和BBB都没有定义zzz()方法,继续往上找原型链,直到找到最顶层的父类AAA(AAA里定义了zzz()),因此调用AAA.zzz()。

简单说,不是this指向了父类,而是实例找不到自身/子类的方法,才去父类的原型上找对应的方法执行,而执行这个方法时,this依然指向当前实例。

问题2:步骤7中,this.xxx()为何指向BBB类?

这个问题的核心还是**this的指向不会因为方法在父类中定义而改变**——哪怕你在AAA.zzz()这个父类方法里调用this.xxx(),this依然指向当前的实例c(CCC的对象)。

所以当执行AAA.zzz()里的this.xxx()时,还是按照实例的原型链去查找:CCC没有xxx(),找BBB的xxx(),自然就指向了BBB类定义的xxx()方法,而不是AAA自己的xxx()。

这里要区分super和this的不同:super.xxx()是明确调用父类的方法,而this.xxx()始终是基于当前实例的原型链找最匹配的方法。


内容的提问来源于stack exchange,提问作者Kyle Oliva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:01:44