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);
}