Considere la siguiente función constructora que tiene un método que registra el contexto
function Foo() { this.logContext1 = () => console.log('logContext1', this); } let foo = new Foo(); foo.logContext2 = () => console.log('logContext2', this); foo.logContext1(); foo.logContext2(); logContext1 tiene contexto ( this ) establecido en el objeto Foo creado por new,
mientras que logContext2 tiene contexto ( this ) establecido en el objeto de ventana
Teniendo en cuenta que ambas son funciones de flecha, ¿por qué vemos esta diferencia?
this se define donde se declaran las funciones de flecha :
() => console.log('logContext1', this) se declara en el constructor, this es el objeto que se crea en ese contexto() => console.log('logContext2', this) se declara en el nivel superior, this es una window en ese contexto (o undefined en modo estricto )