JavaScript:派生类重写方法前如何调用基类函数?
在JavaScript派生类中调用基类方法的正确姿势
嘿,我来帮你搞定这个问题!在ES6类继承体系里,调用基类方法核心靠super关键字,分两种常见场景给你拆解说明:
1. 调用基类的构造函数
如果你的派生类需要自定义构造逻辑,必须先调用super()——不然JavaScript引擎会直接报错。你得把基类构造函数需要的参数(比如你的args和kwargs)传递进去,这样基类的初始化代码(比如this.query_params的赋值)才能正常执行。
先给你补全正确的派生类构造示例:
const BaseClass = require('./BaseClass'); // 记得引入基类文件 class DerivedClass extends BaseClass { constructor(args, kwargs) { // 第一步:调用基类构造,传递所需参数 super(args, kwargs); // 第二步:写派生类自己的初始化逻辑 this.derivedCustomParam = '专属派生类的变量'; } }
2. 调用基类的普通方法(比如retrive)
如果你的派生类想要重写基类的retrive方法,但又不想完全丢掉基类里的逻辑,就可以用super.retrive()先触发基类的实现,再叠加自己的代码。
给你一个完整的派生类示例:
const BaseClass = require('./BaseClass'); class DerivedClass extends BaseClass { constructor(args, kwargs) { super(args, kwargs); // 派生类初始化逻辑 } retrive() { // 先执行基类的retrive逻辑,复用它的offset、limit处理 super.retrive(); // 这里添加派生类专属的功能 console.log('执行派生类的额外retrive逻辑'); let customFilter = getData(this.query_params, 'filter_type', 'all'); // ...其他派生类独有的业务代码 } } module.exports = DerivedClass;
小提醒
- 注意你代码里的拼写错误:
DerivedClass extends BaseClas少了个s,应该是BaseClass,不然会找不到基类哦。 super在构造函数里是作为函数调用(对应基类构造),在普通方法里是作为对象使用(指向基类原型),所以能直接调用基类的原型方法。- 如果不需要重写基类方法,派生类会自动继承所有基类方法,直接用
this.retrive()调用就行。
内容的提问来源于stack exchange,提问作者sam23
相关产品推荐
相关产品推荐

