我有以下类;我尽可能简短地解释了这个问题:
@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将传递一个函数,该函数将在其上下文中执行该方法。