Home > OS >  How to avoid losing object this context in Typescript?
How to avoid losing object this context in Typescript?

Time:12-25

I have created a getter field on a class that returns a method, which is invoked with some inputs. Here is the method:

private gainItem(rewardItem: Item) {
  console.log(this);
  //Give item to user
}

Here is the getter field on the class containing this method:

private get npcPlayerInterface(): NpcPlayerInterface {
  return {
    gainItem: this.gainItem,
  };
}

I then pass the getter to another class like this:

this.npcChatState = new NpcChatState(this.npcPlayerInterface);

Finally, this is how it is invoked inside the npcChatState class:

npcPlayerInterface.gainItem({ id: ItemId.CAR_BLUE, name: 'Blue CAR' });

The console.log(this) statement shows that the this keyword refers to another object, not the one that I want. How can I fix this without using bind() or this-aliasing?

CodePudding user response:

Just use arrow syntax:

private gainItem = (rewardItem: Item) => {
    console.log(this);
}
  • Related