我有一个可观察对象,它返回一个值,我需要在一个函数中操作,所以我认为它会更干净,如果我只是发送函数作为回调,而不是创建一个新的匿名函数。然而,我做了改变,我开始得到这个错误信息:Error: Cannot set properties of undefined (setting 'name')
.
ngOnInit(): void {
this.updateName('First New Name!');
of('Second New Name!')
.pipe(delay(1500))
// .subscribe(name => this.updateName(name)); // Works!
.subscribe(this.updateName); // Doesn't work - Error: Cannot set properties of undefined (setting 'name')
}
updateName(name: string): void {
this.name = name;
}
它应该这样工作吗?为什么会发生这种情况?
将updateName
切换为lambda/arrow功能
updateName = (name: string) => {
this.name = name;
}
StackBlitz的示例演示
根据箭头函数表达式,箭头函数不拥有this
。
因此,箭头函数作用于箭头函数建立"this">
this
在作用域中像正常变量一样查找。
来自:@Felix关于如何在回调中访问正确的this
的答案