Javascript 将方法用作筛选器的回调函数会影响回调的范围

Javascript 将方法用作筛选器的回调函数会影响回调的范围,javascript,angular,typescript,filter,Javascript,Angular,Typescript,Filter,我在angular中遇到了一个问题,我的方法由于被作为回调函数调用而失去了作用域。有人能解释为什么这会变成未定义的吗 PS:我已经知道我可以通过将此作为一个论点来解决这个问题。我想知道为什么范围会发生变化。还可以选择如何防止它。因为您的函数是用数组过滤器调用的。有两种方法可以做到这一点: 使用箭头函数 返回帐户\u access.filtervalue=>this.status\u filtervalue; 使用绑定 返回帐户\u access.filterthis.status\u filte

我在angular中遇到了一个问题,我的方法由于被作为回调函数调用而失去了作用域。有人能解释为什么这会变成未定义的吗


PS:我已经知道我可以通过将此作为一个论点来解决这个问题。我想知道为什么范围会发生变化。还可以选择如何防止它。

因为您的函数是用数组过滤器调用的。有两种方法可以做到这一点:

使用箭头函数 返回帐户\u access.filtervalue=>this.status\u filtervalue; 使用绑定 返回帐户\u access.filterthis.status\u filter.bindthis; 函数中的值取决于该函数的调用方式。让我们看一个简单的例子:

function A() {}
A.prototype.foo = function() {
  // do something
}

const a = new A();
如果像这样调用foo,则此内部的值将是a对象:

但是,如果将对foo函数的引用存储到其他变量,则它将不再绑定到a实例,并且其值将是未定义的:

const f = a.foo;

f(); // <- value of this inside is undefined
它将创建一个指向实例的函数副本

另外,我向您推荐这篇关于如何在JS中工作的伟大而全面的文章:

a.foo();
const f = a.foo;

f(); // <- value of this inside is undefined
return account_accesses.filter( this.status_filter.bind(this) )