2

我开始在 javascript 上构建更大的东西,我想知道编码风格和性能。现在我试图弄清楚在这种情况下附加事件处理程序的最佳方法是什么:我有 Item() 构造的对象,文档中有 div ,每个对象一个,具有对应的 id。我想从每个 div 的事件处理程序访问其项目对象表示。这些项目将被大量操作、创建、删除等,它们的 div 也是如此。您可以在此处查看代码(非常感谢任何一般编码风格的反馈)。

我可以这样做:

  1. 通过直接将我的所有事件处理程序放在 Item 构造函数中,这样他们就可以访问正在构造的对象(var that = this)。我不认为在这里有所有这些代码是个好主意,但我可能想多了。

  2. 将处理程序存储在单独的 handlerCollection 对象中,并使用辅助函数 getItemFromDOM(div) 访问项目对象,该函数读取 div id 并在存储文档中所有项目的数组中搜索相应的项目。

  3. 在代码中的某个地方有一个函数 registerItemEvents(item) 在 Item 构造函数中调用并用于为处理程序生成项目的闭包,该处理程序将存在于其中。

我猜最优雅的是第三个,但我可能高估了整洁,拒绝了第一个。还有没有机会,使用第三个,如果我开始删除项目,关闭它们会阻止内存被释放,最终减慢整个事情的速度?我可以通过在删除项目之前简单地释放事件处理程序来解决这个问题吗?

4

1 回答 1

0

如果可能的话,我认为你应该考虑使用代表。据我所知,添加和删除事件处理程序会增加不必要的开销。

无论您选择如何实现(jquery、yui、其他、自定义),这篇来自 Yahoo! 的帖子 有一些很好的信息

http://www.yuiblog.com/blog/2009/11/13/event-delegation-3/

于 2012-08-10T08:18:13.163 回答