将私有方法传递给lambda时,typescript字段为null



我有以下类;我尽可能简短地解释了这个问题:

@Injectable()
export class TestService {
...
private testSubscription: Subscription = new Subscription;
constructor(
private store: Store<FromTest.IState>,
private otherService: otherService) {
}
public MainTestMethod() {
this.testSubscription = this.otherService.getSomethingObservable().subscribe(toBeCalledTestMethod)
}
private toBeCalledTestMethod(something: boolean) {
this.store <- undefined
}
...
}

当传递一个方法来订阅时,字段"store"是未定义的。然而,当我将订阅方法更改为:时

this.testSubscription = this.otherService.getSomethingObservable().subscribe(x => toBeCalledTestMethod(x))

字段"store"有一个值(这是预期的(。

很高兴我找到了让它工作的方法,但我不明白为什么将方法作为lambda传递会导致不同的行为。

我是打字和棱角分明的新手,所以想知道为什么。

提前感谢!

感谢@ritaj对"toBeCalledTestMethod.bind(this("的评论,我现在知道原因了。

通过这样的方法:

this.otherService.getSomethingObservable((.subscribe(toBeCalledTestMethod(

将不带上下文的方法传递给订阅函数。

要使用方法保留上下文,可以使用bind将其绑定到类,也可以使用lambda来保留上下文。

由于传递lambda将传递一个函数,该函数将在其上下文中执行该方法。

最新更新