addEventListener与onClick属性相比的缺点

4
我了解addEventListeneronclick属性之间的区别,并知道如何使用它们。我想知道总是使用EventListener是否有缺点,而不是使用onclick属性。当使用javascript动态生成HTML时,EventListener似乎比仅使用onclick更强大。是否存在内存/CPU缺陷,或者只使用EventListener是否安全?

这听起来像是微小的优化,所以我必须问一下:为什么?你有千万亿个事件在进行吗? - Zirak
是的,我需要几百个ActionListener。 - slimbo
几百个不应该引起注意,除非有很大的差异。当你进入百万级别时,开始担心优化。 - Zirak
1个回答

3

也许这不是你想要的方向,但有一些情况下你无法移除事件监听器。

事件处理程序完全公开,并且可以被任何人(在一定程度上)修改:

// You do this
myLink.onclick = function () {
    alert('hello, world');
};

// Another developer who hates you because
// he thinks that you're hitting on his girlfriend
// but you're not, you're just friends, but
// he's jealous so he doesn't understand
// does this
myLink.onclick = function () {
    alert('muahahahaha');
};

// Someone else could even get rid of
// the handler entirely:
myLink.onclick = null;

但是没有公开可访问的事件监听器列表。唯一的方法是如果您仍然可以访问原始函数,则可以删除事件监听器:

myLink.addEventListener('click', function () {
    alert('hello, world');
}, false);

现在没有办法移除该事件监听器。您给它一个匿名函数,所以即使您想要删除它,也无法删除。


抱歉,我对网络编程非常新手。当你说有人可能会接管我的操作监听器时,你能解释一下这是什么意思吗? - slimbo
遗憾的是,EventListenerList从未被纳入最终草案。 - Crescent Fresh
所以你的意思是,有人可以通过注入JavaScript来盗版我的页面,并接管我的操作监听器?或者我误解了吗? - slimbo
1
@macneil 这是一种可能性。很多时候,网站通过将事件处理程序分配给 document.oncontextmenu 来取消右键单击。因此,如果您想重新允许右键单击,只需添加一个用户脚本,设置 document.oncontextmenu = null 即可。实际上,这种情况并不经常发生。只是我内心的自由主义者讨厌任何其他包含在页面中的脚本(广告、分析等)会干扰我的事件处理程序。 - sdleihssirhc
对于我的应用程序来说不应该是问题,但考虑这一点肯定是值得的。谢谢。 - slimbo
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接