Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 变量在函数中调用时总是未定义的_Javascript_Typescript - Fatal编程技术网

Javascript 变量在函数中调用时总是未定义的

Javascript 变量在函数中调用时总是未定义的,javascript,typescript,Javascript,Typescript,在回答我的问题之前,这里是我的Typescript类: export class Info { private currentId: number; private addToListButton: HTMLInputElement; constructor() { this.currentId = +(<HTMLInputElement> document.getElementById("Example")).value;

在回答我的问题之前,这里是我的Typescript类:

export class Info {

    private currentId: number;

    private addToListButton: HTMLInputElement;

    constructor() {
        this.currentId = +(<HTMLInputElement> document.getElementById("Example")).value;

        this.addToListButton = <HTMLInputElement> document.getElementById("addToList");

        this.registerEvents();
    }

    private registerEvents(): void {
        this.addToListButton.addEventListener("click", (() => this.addToList()));
    }

    private addToList(): void {
        var data: SomeModel;
        data.id = this.currentId;

        // ajax stuff
    }
}
导出类信息{
private currentId:编号;
私有addToListButton:HTMLInputElement;
构造函数(){
this.currentId=+(document.getElementById(“示例”)).value;
this.addToListButton=document.getElementById(“addToList”);
这是registerEvents();
}
私有registerEvents():void{
this.addToListButton.addEventListener(“单击”,(()=>this.addToList());
}
私有addToList():void{
var数据:SomeModel;
data.id=此.currentId;
//ajax的东西
}
}
我的问题是,当我想要获取模型的“currentId”时,它总是未定义的。 另一个变量“addToListButton”可以在同一函数中使用,不会出现问题

我看不出有什么问题

谢谢你的帮助

addToList()
方法中,关键字
this
指的是事件上下文,而不是
Info
对象上下文

要以这种方式使用,需要将方法绑定到类。将其添加到构造函数中:

this.addToList = this.addToList.bind(this);

函数
addToList
中的关键字
this
在此处调用函数
this.addToListButton.addEventListener时,不引用类
Info
的实例(“单击”(()=>this.addToList())

要使此
引用实例,请使用箭头函数:

private const addToList = (): void => { // Arrow function
  var data: SomeModel;
  data.id = this.currentId;

  // ajax stuff
}

有一些关于什么是箭头函数的解释。

@RandyCasburn我以前调试过构造函数中的位置,正确地感觉到了变量。因此,我相信这条路线是正确的。