【发布时间】:2012-07-03 16:49:17
【问题描述】:
在事件侦听器中使用this 或event.target 是否更好/更快
我一直在写这样的代码(例如 jQuery):
jQuery('input').bind('keyup', function (e) {
var j = jQuery(e.target);
foo(j.attr('id') , j.val() );
});
有人告诉我用this 替换e.target,因为它“更好”。两者之间真的有任何优势吗?
我使用 target 是因为它是一种更通用的解决方案,因为它适用于委托事件。我在进行基准测试时遇到了麻烦,因为我的测试被绑定弄得杂乱无章(尽管很明显,在这种情况下,差异太小了,无论如何都不重要)
【问题讨论】:
-
使用委托,
this返回匹配选择器的元素。target返回事件冒泡的元素。 -
this在这种情况下更快:jsperf.com/this-and-event-target -
这会稍微快一些,因为它不必解析
property of object。但这太微不足道了,甚至不值得讨论。如果您出于性能原因正在查看此内容,请先查看this.id而不是j.attr('id')。 (短:真的没关系!) -
您的 jsperf 衡量的是注册事件处理程序的性能,而不是事件处理程序本身的性能。
-
@Mageek 如果您交换测试的顺序,您的 jsperf 会返回相反的结果。有没有人有一个实际显示哪个(稍微)更快的基准示例?
标签: javascript jquery optimization