【发布时间】:2024-05-23 22:40:01
【问题描述】:
HTML
<div class="sym-box" data-card="0">
<div id="a"><img src="..."></div>
</div>
<div class="sym-box" data-card="1">
<div id="b"><img src="..."></div>
</div>
<div class="sym-box" data-card="2">
<div id="c"><img src="..."></div>
</div>
JS
var attribute;
function myFunction() {
attribute = this.getAttribute('data-card');
}
var symboxes = document.getElementsByClassName('sym-box');
for (i = 0; i < symboxes.length; i++) {
symboxes[i].addEventListener('click', myFunction, false);
}
上面的代码按预期工作,“this”引用了点击的元素。但是,当我将其编写为箭头函数时,我得到“未捕获的 TypeError:this.getAttribute 不是函数”,因为“this”现在指的是窗口对象。
const myFunction = () => {
attribute = this.getAttribute('data-card');
};
所以我的问题是如何将 myFunction() 重写为箭头函数,其中“this”指的是被点击的元素?
注意: 我的问题已被标记为重复,但我要求在使用箭头函数时解决相同的问题。只是被告知“你不能”或“不要”并没有回答我的问题。
【问题讨论】:
-
简单,你不能——箭头函数
this定义的很明确,不能是被点击的元素 -
如果出于某种原因您坚持使用箭头语法,请使用
event.currentTarget而不是this。
标签: javascript ecmascript-6 arrow-functions