Typescript kan inte behålla referensen till ägar-klassen
Jag kan inte lista ut hur man behåller en referens till chatklassen i den här situationen. Vad är lösningen?
class chat {
private self: chat;
public currentUsers: any = ko.observableArray();
constructor(public chatService: any) {
this.self = this;
chatService.client.receiveUsers = this.receiveUsers;
}
private receiveUsers(users: any): void {
//'this' has been changed to refer to the external caller context (chatService.client)
this.currentUsers(users);//fail
//property currentUsers does not exist on value of type 'Window'
self.currentUsers(users);//fail
//currentUsers does not exist in the current scope
currentUsers(users);//fail
//There's apparently no way to access anthing in this chat class from inside here?
}
}
Svar #1
Att försöka behålla en referens till this på klassinstansen är som att sätta en klisterlapp på fjärrkontrollen som säger "Här är fjärrkontrollen!" eftersom du hela tiden tappar bort den.
Använd ett fetpil-lambda-uttryck för att fånga det lexikala 'this' på callback-platsen:
class chat {
public currentUsers: any = ko.observableArray();
constructor(public chatService: any) {
chatService.client.receiveUsers = (users) => this.receiveUsers(users);
}
private receiveUsers(users: any): void {
// use 'this' here now
}
}
