gpt4 book ai didi

javascript - 为什么 document.body 的事件处理程序中的 'this' 关键字引用全局窗口对象?

转载 作者:搜寻专家 更新时间:2023-11-01 04:21:22 25 4
gpt4 key购买 nike

<!DOCTYPE html>
<html>
<head>
<style type="text/css">
body {
height: 1000px;
}
</style>
<title>Scroll</title>
</head>
<body>
<button id="btn">click</button>
<script type="text/javascript">
document.body.onscroll = function() {
alert(this);// displays [object Window], instead of [object HTMLBodyElement]
};

document.getElementById('btn').onclick = function() {
alert(this);// displays [object HTMLButtonElement]
}
</script>
</body>
</html>

我将 this 关键字放在按钮元素事件处理程序和 body 元素的另一个处理程序中,但第二个 this 关键字引用全局窗口对象。为什么?

最佳答案

那是因为 body 元素将 Window 对象的许多事件处理程序公开为事件处理程序内容属性。

此类事件目前有:blurerrorfocusloadresize滚动

这个列表称为“窗口反射体元素事件处理程序集”

(参见,例如:https://html.spec.whatwg.org/dev/webappapis.html)

关于javascript - 为什么 document.body 的事件处理程序中的 'this' 关键字引用全局窗口对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58154152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com