为什么在函数调用中使用事件监听器?

Org*_*cat 11 events event-listener event-handling

我最近一直在研究听众,我想我终于让他们失望了.基本上,它们是在另一个对象的方法上调用的函数.我的问题是,为什么在调用函数时创建事件监听器会正常工作?

例如,我想调用player.display_health(),当触发它时,应该触发并存储方法player.get_health(),以便display_health()可以访问它.为什么我应该使用事件监听器而不是简单地调用该函数?即使display_health()在另一个对象中,这对我来说似乎仍然不是问题.

如果你有另一个更好地符合用法的例子,请告诉我.也许特定语言不能从中受益多少?(Javascript,PHP,ASP?)

Dav*_*vid 12

您可能无法始终控制正在执行调用的代码.或者即使您是,也不希望在该代码中引入依赖项.在这种情况下,代码最好触发事件并允许您控制的代码或应该具有依赖关系的代码来监听事件并相应地执行操作.

例如,您可能正在创建一个供其他人使用的库.他们没有源代码或以某种方式不能/不应该能够修改它(或者不应该).您的文档说明在特定情况下会引发特定事件.然后,他们可以响应这些事件.

或者您的企业中可能有一些域库.您可以控制它们并可以对它们进行修改,但从架构上来说,它们通常被认为是有效的,因为它们当前已编码且不应更改.(不想招致一轮QA重新验证更新的代码,代码属于另一个部门,他们不希望你改变它等等.)你处于你想要的位置代码能够在不同的环境/环境中做不同的事情.如果该代码引发相关的事件和事件,您可以将代码挂钩(和/或相应地交换),而不必弄乱该代码.

只是几个简单的例子,我相信其他人有更多.


Ano*_*on. 5

我的问题是,为什么在调用函数时创建一个事件监听器就可以正常工作?

如果您不知道要调用什么函数怎么办?

举一个经典的例子,用户可以点击的按钮。编写库的人都不知道单击按钮时要调用什么函数。如果每个 Button 在单击时只能调用相同的函数,那也是相当令人望而却步的。

因此,您可以将事件处理程序附加到该事件。然后,当事件被触发时,按钮可以执行它需要的操作,而无需在编译时确切地知道它应该调用哪个函数。