我正在使用Angular / Typescript项目。我有以下构造我正在建造一个轻量级的pubsub。这是一个流利的语法订阅。
repl
我想要简化的部分是HandleEventWithThis方法。在C#中,它是 SubscribeEvent.Create(PubSubTopic.testEvent,
this.objectId)
.HandleEventWithThisMethod( (PubSubEventArgs) =>
{self.handlePEvent(PubSubEventArgs); } )
.ApplyFilterPredicate((res: PubSubEventArgs) => {
return (res.sourceObjectId === self.objectId);
});
当我取消胖箭的东西时,我在handlePEvent中忘记了这个。
有人可以告诉我如何简化HandleEventWithThisMethod(handlePEvent)
的语法吗?
答案 0 :(得分:3)
你有一些额外的括号,你不需要。你可以像这样简化:
SubscribeEvent
.Create(PubSubTopic.testEvent, this.objectId)
.HandleEventWithThisMethod(args => self.handlePEvent(args))
.ApplyFilterPredicate(res => res.sourceObjectId === self.objectId);
或
SubscribeEvent
.Create(PubSubTopic.testEvent, this.objectId)
.HandleEventWithThisMethod(self.handlePEvent.bind(self))
.ApplyFilterPredicate(res => res.sourceObjectId === self.objectId);
你不能直接传递self.handlePEvent
是因为函数本身并不与对象相关联。如果您传递函数引用然后调用该函数,默认情况下this
将不是对象,而是Window
。
您可以通过bind
调用强制功能绑定到对象,如self.handlePEvent.bind(self)
中所示。