在我的代码中,我有两个全局变量定义为

constructor() {
        this.map = new Map();
        this.player = new Player([], "");
    }


我可以正常地通过程序访问这些变量,但是,当我调用我的函数this.handleInput(Command.GO, "north");中的一个(其中Command.GO转换为“ GO”,而“ north”是一个方向)时,所有全局变量都变得不确定。在handleInput方法中,

private handleInput(cmd:Command, arg:string):boolean {
      console.log("Handling", cmd, "with argument '"+arg+"'");
      if (cmd === "GO") {
            console.log(`You go ${arg}`);
                this.player.setCurrentLocation(this.map.getNextLocation(arg).getName());
                this.updateGame(this.map.getNextLocation(arg));
            }
        }


我立即收到错误,指出this.player和this.map是未定义的,但是在调用该方法之前,它们并不是未定义的!我不了解TS / JS中的全局变量吗?

最佳答案

根据调用this的方式,您的handleInput最有可能引用另一个对象。在您的contructor()中,将bind handleInput更改为this,或将您的handleInput更改为使用箭头功能:

constructor() {
  this.handleInput = this.handleInput.bind(this);
}


要么:

handleInput = (cmd:Command, arg:string):boolean => {}

08-15 18:07