在 javascript 类继承中,super 在 getter/setter 中必须显式调用 super.gettername 或 super.settername = value,不可直接使用 super.prop 读写,否则易出错或行为异常;父类访问器的副作用会被触发,推荐统一用显式语法以保证语义清晰。

在 JavaScript 类继承中,super 可以在 getter/setter 里调用父类同名的访问器,但不能直接用 super.prop 读写——必须通过 super.getterName 或 super.setterName = value 显式调用,否则会出错或行为异常。
调用父类 getter:用 super.getterName()
子类 getter 中想复用父类逻辑(比如做额外处理前先获取原始值),应显式调用 super.xxx。注意这不是属性访问,而是方法调用语法:
- 父类定义了
get name() { return this._name; } - 子类中写
get name() { return super.name + ' (child)'; }是合法且常见的 - 如果父类 getter 有副作用(如日志、计算),
super.name会触发它
调用父类 setter:用 super.setterName = value
setter 中调用父类逻辑需用赋值形式,不是函数调用:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 父类有
set age(value) { if (value > 0) this._age = value; } - 子类中可写
set age(value) { console.log('setting age...'); super.age = value; } - 错误写法:
super.age(value)或super.age = value(没加set声明)会报错
避免直接访问 super.prop
super.prop 在 getter/setter 外部是常规属性访问,但在访问器内部直接这么写,容易混淆语义且不可靠:
- 若父类只有普通属性
this.prop,super.prop可读取(走原型链) - 但若父类用
get prop()定义,则super.prop实际调用的是 getter —— 这是隐式行为,不推荐依赖 - 为清晰和可维护,getter/setter 内统一用
super.getterName或super.setterName = ...
特殊场景:描述符级操作
当需要精确控制 getter/setter 的继承行为(比如覆盖后仍想保留原始 descriptor),得用底层 API:
- 用
Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Child.prototype), 'prop')获取父类访问器描述符 - 再用
Object.defineProperty手动设置,避免直接覆盖丢失逻辑 - 这种做法多见于框架或高级封装,日常开发优先用
super.xxx语法
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










