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

JS类继承方法报错:私有字段访问引发TypeError的底层原因

JS私有字段继承重写方法报错的底层逻辑

核心原因拆解

  1. 私有字段的类绑定规则
    JS的私有字段(#xxx)是严格绑定到定义它的类的,子类无法直接访问父类的私有字段,哪怕通过super也不行——私有字段的可见范围仅限于其定义类的内部代码。父类Person的#birthYear和子类Student的#birthYear是完全独立的两个字段,彼此隔离。

  2. 空super()导致父类私有字段未就绪
    你在子类构造函数中调用了空super(),父类Person的构造函数未接收到初始化私有字段的必要参数,导致父类的#birthYear要么未被赋值(值为undefined),要么处于未就绪状态。

  3. 重写方法中的非法访问触发报错
    当你在子类中重写calculateAge时,若方法内部存在以下两种情况,就会触发报错:

    • 试图通过super.#birthYear访问父类私有字段:这违反了私有字段的类绑定规则,直接抛出TypeError提示无法访问父类的#birthYear。
    • 调用super.calculateAge():父类的calculateAge方法会试图访问父类自己的#birthYear,但由于父类构造函数未被正确初始化,该字段的访问会触发错误。
  4. 重命名方法避开错误触发点
    当你将子类方法改名为ageCalc时,这是子类全新定义的方法,既不会触发父类的calculateAge方法,也不会出现访问父类私有字段的逻辑,因此可以正常访问子类自己的#birthYear完成计算。

  5. 未重写的introduceSelf正常运行的原因
    introduceSelf作为父类方法,其内部访问的父类私有字段未依赖#birthYear这类需要参数初始化的字段,或者父类构造函数对相关字段有默认处理,因此没有触发非法访问逻辑,得以正常执行。


内容的提问来源于stack exchange,提问作者Attila Fekete

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:17:06