1

<td id='xyz' onmouseover='doIt(this)'... 例如,和 之间有什么区别<td id='xyz' onmouseover='doIt()'...。是thisDOM元素吗?

4

4 回答 4

3

浏览器调用构造的处理函数,以便this引用事件所针对的 DOM 元素。因此,this它只是对出现此类属性的 DOM 元素的引用。

于 2013-03-26T23:32:40.777 回答
2

在示例中,this指的是处理程序绑定到的 DOM 元素。我建议阅读quirksmode.org 上的优秀文章,其中解释了这一点以及更多关于事件处理的内容。

<td id='xyz' onmouseover='doIt(this)'...和有什么区别<td id='xyz' onmouseover='doIt()'...

在第一种情况下,您将参数传递给函数,这是一个 DOM 元素,在第二种情况下,您没有。

于 2013-03-26T23:32:48.120 回答
2

this引用 DOM 元素,在您的示例中为tdDOM 元素。

查看有关事件处理程序的 MDN 页面以获取更多信息,特别是有关内联事件处理程序的部分。

于 2013-03-26T23:32:56.317 回答
0

你问“有什么区别”。不同之处在于,在第一种情况下,调用是从执行上下文进行的,其中是对元素的引用,并且该引用作为第一个参数this传递给。doIt在第二种情况下,不传递任何参数。

现在为什么。

当一个事件到达一个元素时,相关的处理程序将查看是否有任何代码要运行。如果存在,它将创建一个新的执行上下文,就像在函数代码中一样,其作用域链上的全局对象和this绑定设置为元素。然后它将执行代码。所以在处理程序的执行上下文中,当代码:

doIt(this)

被执行,this引用元素。请注意,由于this未在对 的调用中设置doIt(),因此this它将在非严格模式下默认为全局对象,或者在严格模式下保持未定义。

于 2013-03-26T23:55:25.860 回答