代码之家  ›  专栏  ›  技术社区  ›  JDelage

“this”在“on..”属性中的函数内部指的是什么?

  •  1
  • JDelage  · 技术社区  · 13 年前

    例如 <td id='xyz' onmouseover='doIt(this)'... 和 <td id='xyz' onmouseover='doIt()'... 是 this DOM元素?

    4 回复  |  直到 13 年前
        1
  •  3
  •   Pointy    13 年前

    浏览器调用构造的处理程序函数,使得 this 指的是事件所针对的DOM元素。因此 这 只是对出现此类属性的DOM元素的引用。

        2
  •  2
  •   Felix Kling    13 年前

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

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

    在第一种情况下,您将参数传递给函数,该函数是一个DOM元素,而在第二种情况下则不传递。

        3
  •  2
  •   Rich O'Kelly    13 年前

    这个 this 将引用DOM元素,在您的示例中 td DOM元素。

    看看 MDN page on event handlers 有关详细信息,请参阅 inline event handlers .

        4
  •  0
  •   RobG    13 年前

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

    现在是为什么。

    当事件到达一个元素时,相关的处理程序将查看是否有任何代码要运行。如果有,它将创建一个新的执行上下文,就像在函数代码中一样,全局对象位于其作用域链上,并且 这 绑定集到元素。然后它将执行代码。因此,在处理程序的执行上下文中,当代码:

    doIt(this)
    

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