为什么我有未定义的变量?

时间:2018-12-07 13:10:38

标签: javascript typescript

我上课的财产是:

public requestLoadPersonal: Personal[] = [];

还有一种方法:

private filterByGender(selectedValue: any): void {
    console.log(this.requestLoadPersonal);
    this.requestLoadPersonal = this.requestLoadPersonal.filter(
      (p: Personal) => {
        return selectedValue ? p.gender == selectedValue : true;
      }
    );
  }

在类的构造函数中,我有:

 public filterFn = {
    name: this.filterByGender
 }

为什么要通过键从对象this.filterByGender调用函数filterFn。我收到未定义的消息,为什么变量this.requestLoadPersonal在内部不可用:

console.log(this.requestLoadPersonal);吗?

致电方式:

 this.filterFn['name']({...});

我试图绑定变量:

 this.filterFn['name']({...}).bind(this.requestLoadPersonal);

1 个答案:

答案 0 :(得分:1)

在构造函数中,应将函数绑定到this,如下所示:

constructor() { this.filterFn = { name: this.filterByName.bind(this) }; }

因为仅{name: this.filterByName}失去了this上下文,即 filterByName具有其他实例的this上下文。

但是,我建议您简化所有内容并使其更加简单明了。当前它很复杂,因此容易出错。