提问人:Loupi 提问时间:7/8/2021 更新时间:7/8/2021 访问量:1067
如果我调用 child.listen(),为什么 Typescript 会从父类中调用被覆盖的子方法?[复制]
Why is Typescript calling an overridden child method from within the parent class if I call child.listen()? [duplicate]
问:
class Base {
setupServer(){
console.log("BaseClass")
}
listen() {
this.setupServer();
}
}
class Child extends Base {
setupServer() {
console.log("ChildClass")
}
}
const child = new Child();
child.listen();
为什么打印出来:?我希望在类中只能看到同一类中的方法。有没有办法从子实例调用函数,然后仍然先执行类方法,而不在 Child 类中执行?ChildClass
this
Base
setupServer
listen
Base
setupServer()
super.setupServer()
答:
0赞
trincot
7/8/2021
#1
即使你对另一个类进行子类化:一个实例只是一个对象,即使基类上的方法对它做一些事情。this
因此,在您的示例中,当类上的方法调用时,仍然是 ,它是 的实例,因此 的分层查找将与 上定义的查找匹配。listen
Base
this.setupServer()
this
child
Child
setupServer
Child
0赞
Tushar Shahi
7/8/2021
#2
this
在函数中取决于它的执行方式。这里它是在子实例上执行的,因此将调用子实例的方法。setupServer
关于为什么从基类中删除在 TS 中显示错误的问题:setupServer
class Base {
listen() {
this.setupServer();
}
}
class Child extends Base {
setupServer() {
console.log("ChildClass")
}
}
const child = new Child();
child.listen();
这很简单,在这种情况下,您可以随时从基类创建一个对象,当您调用 .Typescript 不能让你这样做,即使后面在子类中定义了函数。this.listen()
setupServer
评论
this
this
super.setupServer()
setupServer()
this.setupServer()