【前端】currentTarget与target的区别
前言
在前几天的前端面试中,面试官问了currentTarget与target的区别,我当时没回答出来,特此去学习了相关知识,在此记录下。
正文
我们先来看个例子:
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="test1">
<div id="test2">test</div>
</div>
</body>
<script>
var test1 = document.getElementById("test1");
var test2 = document.getElementById("test2");
test2.onclick = function(e) {
console.log(e.target);
console.log(e.currentTarget);
console.log(this);
console.log(e.target === e.currentTarget);
console.log(e.target === this);
console.log(e.currentTarget === this);
};
</script>
</html>
控制台打印结果:
结论: 当事件处理程序注册的元素等于事件的实际目标元素的时候,e.target和e.currentTarget以及this三者相同。
再来一个例子:
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="test1">
<div id="test2">test</div>
</div>
</body>
<script>
var test1 = document.getElementById("test1");
var test2 = document.getElementById("test2");
test1.onclick = function(e) {
console.log(e.target);
console.log(e.currentTarget);
console.log(this);
console.log(e.target === e.currentTarget);
console.log(e.target === this);
console.log(e.currentTarget === this);
};
</script>
</html>
控制台打印结果:
结论: 当事件处理程序注册的元素不等于事件的实际目标元素的时候,e.currentTarget和this两者相同,但e.target不与这两者相同。
总结
currentTarget:事件处理程序注册的元素。
target:事件的实际目标元素。
编辑于 2022-04-19 14:27