【发布时间】:2021-07-07 17:30:14
【问题描述】:
class Base {
setupServer(){
console.log("BaseClass")
}
listen() {
this.setupServer();
}
}
class Child extends Base {
setupServer() {
console.log("ChildClass")
}
}
const child = new Child();
child.listen();
为什么会打印出:ChildClass?我希望Base 类中的this 只能在同一类中看到setupServer 方法。有没有办法从子实例调用listen 函数,然后仍然先执行Base 类setupServer() 方法,而不在子类中执行super.setupServer()?
【问题讨论】:
-
继承就是这样工作的。当前对象 (
this) 只有一个同名的方法,并且在子版本中是子版本。this指的是当前对象,而不是类。 -
您可以通过
super.setupServer()从 Child 调用 Base 的 setupServer 方法,但正如 @deceze 所说,您看到的行为是一种覆盖方法的重点。 -
好吧,这是有道理的,但是如果我从 Base 类中删除
setupServer()方法,编译器会因为监听方法中的this.setupServer()而报错。这是因为编译器不知道子类包含实现吗? -
@Loupi TS 不能让你这样做,因为这样你就可以从基类本身创建无效对象。
-
如果你从基类中移除它,那么你有可能实例化基类,然后你的代码就会中断。那么它就不是类型安全了。
标签: javascript typescript class inheritance this