函数调用后,Typescript全局变量变为未定义

时间:2018-01-28 22:17:54

标签: javascript typescript

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

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中是否存在一些我不理解的全局变量?

1 个答案:

答案 0 :(得分:1)

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

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

或者:

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