gpt4 book ai didi

typescript - 从 TypeScript 中的子类中的回调调用父类(super class)方法时错误 "this"

转载 作者:搜寻专家 更新时间:2023-10-30 21:31:40 24 4
gpt4 key购买 nike

我有一些(有效地)看起来像这样的 TypeScript 代码:

class User {
name: string = "Bob";
sayHello(): void {
console.log("Hello, " + this.name);
}
}

class RegisteredUser extends User {
name: string = "Frank";
sayHello(): void {
var s = super;
setTimeout(() => s.sayHello(), 1000);
}
}

var registeredUser = new RegisteredUser();
registeredUser.sayHello();

问题在于 TypeScript(莫名其妙地,IMO)遵循关于“this”的奇怪 JavaScript 规则,而不是像世界上所有其他编程语言那样做。因此,当从 RegisteredUser.sayHello() 中的覆盖调用 User.sayHello() 时,this 指向 User class 而不是实例化的 RegisteredUser 对象,所以实际记录的是:

Hello, undefined

除了我这样做对我来说没有任何意义(参见 https://typescript.codeplex.com/workitem/477 )之外,解决此问题的最佳方法是什么,以便在 User.从回调调用时,sayHello() 是否指向正确的对象?

最佳答案

好的,这有效:

setTimeout(() => s.sayHello.call(this), 1000);

关于typescript - 从 TypeScript 中的子类中的回调调用父类(super class)方法时错误 "this",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13617130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com