【发布时间】:2012-08-23 05:32:26
【问题描述】:
我有几个不同的 JavaScript 对象,它们的方法要分开。但是,我需要某种类型的观察者、回调或插件设计,以便我可以在正确的时间触发这些方法。
例如,A.Foo() 应该几乎总是在 B.Bar() 之后运行 - 但我不想打电话给 A.Foo() inside B.Bar() 因为在B.Bar() 之后,它不应该运行那些奇怪的时间。那会耦合我的代码,我知道这很糟糕。
我想解决这个问题,就好像B.Bar() 只是在做它的工作,并且不打算了解A.Foo() 或任何其他可能想要与之一起标记的功能。换句话说,为未来的开发者提供插件支持。
您如何在 Javascript 中设计带有观察者或基于事件的回调的模块化、非耦合代码?
【问题讨论】:
-
这个问题可能让我想不通,但是如果全局变量为假,您能否将
A.Foo()中的某种全局布尔变量设置为true 并让B.Bar()立即返回? -
@Travesty3,这会起作用 - 但它会使代码不仅耦合到这两个函数,而且还耦合到一个随机全局变量。
-
这个问题的答案取决于你的代码结构。最通用的方法是传入一个函数来调用
B.Bar()。否则这取决于你实际在做什么,你也可以使用某种延迟式机制,这样你就不需要传递它了。 -
您介意放置一些“知名”对象,例如 A.Foo 和 B.Bar 都知道的观察者(您在原始帖子中提到过)吗?另外,您介意使用 jQuery 还是想要一个完全独立于第三方库的解决方案?
-
类似函数链的东西?
标签: javascript callback observer-pattern