关于“事件对象”一直有个地方不能理解。
直接上代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>test</title>
<style type="text/css">
#test{
width: 400px;
height: 400px;
background-color: blue;
}
#child{
width: 200px;
height: 200px;
background-color: red;
}
</style>
</head>
<body>
<div id="test">
<div id="child"></div>
</div>
<script type="text/javascript">
let action = function(e){
console.log(this);
}
document.getElementById("test").onclick = action;
</script>
</body>
</html>
此时,点击 test
会触发事件action
输出结果为(截图不全,表示<div id="test">
这个节点):
此时,我通过事件对象,获取到了我想要的DOM,即<div id="test">
此时的this
相当于e.currentTarget
(不是很清楚的同学可以看下面的链接,讲的还是比较详细的:链接描述)
现在修改代码为(<script>
标签内):
<script type="text/javascript">
let action = function(item){
console.log(this);
}
document.getElementById("test").onclick =() => action("lalala");
</script>
此时的this
并不是我想要的节点,而是全局windows
对象。
这个问题是关于事件对象的。
在上述情况,我并没有获取到我想要的节点。
之前在本网站有搜索到关于事件对象的问题,但是没有看到我这种情况的解决方法
综上,我的问题是:
在后者情况下,如何获取事件对象,从而获取我想要的节点。
希望有知晓的大佬能提出解决方案,最好能附上简单的例子,
不胜感激!!!
箭头函数内部的
this
是从外层this
,本身不记录this
你实在想用箭头函数可以
call
或者apply
一下改变作用域就行了: