es6 addeventlistener - 无法读取未定义的属性'classList'

kaw*_*nah 0 javascript ecmascript-6

我有一个addEventListener箭头函数,点击一个按钮,它通过切换类来改变颜色.如下所示:

var clickButton = document.getElementById("clicker");

clickButton.addEventListener("click", => () {
  this.classList.toggle("modified");
}, false);
Run Code Online (Sandbox Code Playgroud)

在我的控制台中:

未捕获的TypeError:无法在HTMLButtonElement中读取未定义的属性"classList".

它变得有趣的地方是将它转换为一个JS函数,如下所示:

var clickButton = document.getElementById("clicker");

clickButton.addEventListener("click", function() {
  this.classList.toggle("modified");
});
Run Code Online (Sandbox Code Playgroud)

完美的工作.我不明白为什么arrow函数版本渲染classList undefined.

classListES6箭头的工作原理如何?

kaw*_*nah 5

此上下文中的箭头函数不绑定this到元素,它是词法绑定的.因此在箭头函数示例中,因为this没有绑定到clicker元素,这就是箭头函数不起作用的原因,但是常规函数的作用.

https://codeburst.io/javascript-arrow-functions-for-beginners-926947fc0cdc

http://wesbos.com/arrow-function-no-no/