Javascript 为什么我得到了未定义的变量?

Javascript 为什么我得到了未定义的变量?,javascript,typescript,Javascript,Typescript,我有财产课: public requestLoadPersonal: Personal[] = []; 还有一种方法: private filterByGender(selectedValue: any): void { console.log(this.requestLoadPersonal); this.requestLoadPersonal = this.requestLoadPersonal.filter( (p: Personal) => {

我有财产课:

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
 }
为什么当我从object
filterFn
按键调用函数
this.filterByGender
时。我收到一条未定义的消息,为什么变量
this.requestLoadPersonal
在内部不可用:

console.log(this.requestLoadPersonal)

作为:

 this.filterFn['name']({...});
我尝试绑定变量:

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

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

constructor() { this.filterFn = { name: this.filterByName.bind(this) }; }
因为只要
{name:this.filterByName}
就会丢失
this
上下文,即。
filterByName
具有某个其他实例的
上下文


然而,我建议你简化一切,让它更直截了当。目前,它很复杂,因此容易出错。

您是否尝试过使用箭头函数?不,它在object中是一个很普通的函数也许您应该只绑定
这个
?您能展示一下您的构造函数吗?另外,您应该编写准确的错误消息:未定义什么?当然:
constructor(){this.filterFn={name:this.filterByName};}
当然,我尝试过:
this.filterFn={name:this.filterByName.bind(this.requestLoadPersonal)}
。它仍然不起作用不,你应该绑定
这个
,而不是
这个。requestLoadPersonal
我试过了,
这个
我在里面仍然没有定义function@OPV哦,好的,恭喜:)如果我是你,我会简化你的代码。@dince12你经常使用它,但不完全理解为什么?