关于MDN的以下声明似乎不正确:
调用事件处理程序时,处理程序中的this关键字 设置为注册处理程序的DOM元素。 (source)
此声明约为an on<...> event handler
而不是addEventListener
。
<p><a id="link" href="#" onclick="EventHandler();">click me</a></p>
<script>
function EventHandler() {
console.log(this);
//the this keyword inside the handler is NOT set to the DOM element
//it sets to the window object
}
</script>
与MDN上的陈述相矛盾。
当然,您可以将this
作为参数传递给EventHandler
,或者只使用addEventListener
。但这不是主题。
问题的主题是this
和an on<...> event handler
。
我的问题是:我的理解是不正确还是MDN上的陈述不正确?
答案 0 :(得分:1)
每当事件处理程序is inlined发出此声明时,就在您引用的句子之后的链接中说明了这一说法。
但是,在您的情况下,MDN specify:
当一个函数用作事件处理程序时,它的设置为 元素事件是从触发的(某些浏览器不遵循这一点 使用除以外的方法动态添加的侦听器约定 的addEventListener)强>
我已经测试过最新的Chrome&amp; FF,这些浏览器不遵循这个惯例。
答案 1 :(得分:0)
根据规范,事件监听器/处理程序中的this
将始终是事件的当前目标:
调用侦听器的回调的
handleEvent
,事件已通过 将此算法作为第一个参数和事件的currentTarget
属性值为callback this value。
如果 E 是
ErrorEvent
个对象且event handler IDL attribute的类型为OnErrorEventHandler
Invoke 回调有五个参数,[...]并且回调此值设置为 E
currentTarget
。否则
带有一个参数的