打字稿,使c#像委托,胖箭,这

时间:2017-09-30 02:30:25

标签: angular typescript

我正在使用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)的语法吗?

1 个答案:

答案 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)中所示。