如何将其绑定到 AngularIO Observable::subscribe 的函数?

How to bind this to a function for AngularIO's Observable::subscribe?

有很多使用 AngularIO 中的 Observable.subscribe() 函数的例子。无论如何,我只能看到里面的匿名函数,如:

bar().subscribe(data => this.data = data, ...);

如果我尝试像这里一样提交一个相同 class 的函数:

updateData(myData : DataType[]) {
   this.data = data;
}
...
bar().subscribe(this.updateData, ...);

然后第 2 行中的 this 对象不再引用当前对象。这大概是一些我不明白的JavaScript逻辑。我知道你可以将一个对象绑定到一个函数,这是我必须做的吗?这是最佳做法吗?人们通常如何解决这个问题(我想避免在 subscribe().

中有一个大的匿名函数

这与 粗箭头 行为有关。

您可以find more here(在"this and fat arrow"主题中,大约半页)

您可以将其包装在 arrow function 中,这将捕获正确的 this:

bar().subscribe((myData) => this.updateData(myData), ...);

或使用 Function.bind 也将绑定正确的上下文:

bar().subscribe(this.updateData.bind(this), ...);

但请注意 Function.bind returns any 这会让您在 TypeScript 中失去类型检查。参见 https://github.com/Microsoft/TypeScript/issues/212