Javascript 本机JSmake调用addeventlistener一次以附加多个函数

Javascript 本机JSmake调用addeventlistener一次以附加多个函数,javascript,Javascript,我正在使用addEventListener在名为addEventHandler的函数中为IE向脚本中的元素添加事件,并返回到attachEvent 每次我调用addEventHandler函数时,它都会调用addEventListener,这会降低性能,甚至使jQuery比我的普通JS更快 有没有办法一次调用addEventListener?当前我的代码如下所示: addEventHandler = function (oTarget, sEventType, fnHandler) {

我正在使用
addEventListener
在名为
addEventHandler
的函数中为IE向脚本中的元素添加事件,并返回到
attachEvent

每次我调用
addEventHandler
函数时,它都会调用
addEventListener
,这会降低性能,甚至使jQuery比我的普通JS更快

有没有办法一次调用
addEventListener
?当前我的代码如下所示:

addEventHandler = function (oTarget, sEventType, fnHandler) {
    if (oTarget.addEventListener) {
        oTarget.addEventListener(sEventType, fnHandler, false);
    } else if (oTarget.attachEvent) {
        oTarget.attachEvent(“on” + sEventType, fnHandler);
    } else {
        oTarget[“on” + sEventType] = fnHandler;
    }
};
您可以计算一次,而不是每次迭代,因为在运行时,对实现的支持或缺乏支持不会改变:

if (document.addEventListener) {
    addEventHandler = function (oTarget, sEventType, fnHandler) {
        oTarget.addEventListener(sEventType, fnHandler, false);
    };
} else if (document.attachEvent) {
    addEventHandler = function (oTarget, sEventType, fnHandler) {
        oTarget.attachEvent(“on” + sEventType, fnHandler);
    };
} else {
    addEventHandler = function (oTarget, sEventType, fnHandler) {
        oTarget[“on” + sEventType] = fnHandler;
    };
}

你打了多少次电话给addEventHandler,说这会有所不同?我觉得你在做别的错事。这个简单的函数不应该导致任何实质性的开销。您知道10000次用于比较,我想知道jquery是如何做到这一点的(一个也使用addeventlistener的函数),这样您就不会有实际的性能问题。只是理论上的。是的,jQuery只绑定一个通用侦听器,并将实际侦听器放在
jQuery.cache
中。这可能会在绑定时提供一点改进,但在实际调用事件时会有更多开销……我感觉您的测试在某些方面存在缺陷。您是否将处理程序绑定到同一元素100000次?如果是这样,那么这将是一个问题,因为
.addEventListener
保证了其处理程序的唯一性,但jQuery没有做到这一点。您真的没有抓住要点,不是吗。@user1559763这将函数选择移到初始化(一次)而不是每次调用。我看不出这怎么解决不了你的问题-你介意详细说明吗?@user1559763等等,你想授权吗?类似于“事件”、“选择器”上的
?我的问题是防止调用addeventlistener作为jquerydo@user1559763您可以将函数推送到一个数组,然后在for循环中调用该数组。例如,我真的没有看到用例。感谢您的建议,用例是假设我明天创建一个框架,有人在我测试t时开始测试它今天,如果被jquery打败,那么我的框架将在打开之前关闭;)