Só complementando:
arrow functions "herdam" o this do contexto mais próximo. Mas nao declaram um contexto próprio.
Ex:
class A {
methodA() { }
methodB() {
const b = () => this.methodA()
}
}
functions contém um this próprio, ou seja, um contexto.
Quando uma function é chamada diretamente (foo()) o this dela é undefined.
Se uma function é instanciada (new foo()) o this vai ser a instancia da function (da msm forma que acontece com classes).
Ex:
class A {
methodA() { }
methodB() {
const b = function() {
this.methodA(); // vai dar erro pq this é undefined
}
const a = new (function ()
}
}
Function e arrow function são duas coisas diferentes. Muita gente confunde isso, pensando que são apenas formas diferente de declarar uma função
Correto, muito boa observação, massa demais seu comentário 🛸
Lembrando que arrow funcions também precisam ser declaradas antes de serem usadas. Eu gosto muito de usar arrow functions pra fazer callbacks junto com o jQuery.
$('#meu-seletor').on('click', () => {
// Lógica do onlclick
})
Mas como o colega mencionou, se eu precisar do this, tenho que usar uma function normal.
$('#meu-seletor').on('click', function() {
// Aqui eu tenho o this, referente ao objetor que gerou evento
})