(事実上) 次のような 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) が、世界中の他のすべてのプログラミング言語が行う方法ではなく、「これ」に関する奇妙な JavaScript ルールに従っていることです。User.sayHello() が RegisteredUser.sayHello() のオーバーライドから呼び出されると、インスタンス化された RegisteredUserオブジェクトではなくthis
Userクラスがポイントされるため、実際にログに記録される内容は次のようになります。
Hello, undefined
これをこのようにするのは私には意味がないという事実を超えて ( https://typescript.codeplex.com/workitem/477を参照)、これを回避する最善の方法は何this
ですか? () は、コールバックから呼び出されたときに正しいオブジェクトを指していますか?