Eu setei o valor do descriptor value usando uma lambda function () => {}
inves de escrever function () {}
e o this se torna undefined. Alguem sabe o pq? Sempre achei que as duas formas de escrever dariam na mesma
Eu setei o valor do descriptor value usando uma lambda function () => {}
inves de escrever function () {}
e o this se torna undefined. Alguem sabe o pq? Sempre achei que as duas formas de escrever dariam na mesma
Oii, Hadassa! Tudo bem?
Agradeço por compartilhar sua dúvida por aqui, pois pode ajudar outros colegas que tenham, já que é uma dúvida bastante comum.
Em uma função no formato function() {}
, o JavaScript cria um novo contexto de this
para essa função. Ou seja, o this
dentro dessa função se refere ao próprio objeto que a função cria.
E quando uma função lambda ou arrow function () => {}
é usada, o JavaScript não cria um novo contexto de this
. O que ela faz? Ela usa o contexto de this
do escopo em que a função lambda foi criada.
No exemplo que você deu, quando substituiu function() {}
por () => {}
no descriptor.value
, o this
dentro da função lambda se tornou undefined
, pois não existe um contexto de this
no escopo em que a função lambda foi criada.
Para exemplificar, imagine um cenário onde temos um artista que se apresenta na rua e um artista que usa o holograma para expressarem a sua respectiva arte. O artista de rua, é como se fosse a função normal, se apresenta em locais diferentes e se adapta ao público local. Já o artista do holograma, interpretado pela função setada, ele exibe sempre a mesma apresentação, independente do local que é projeto.
Espero ter ajudado a esclarecer a sua dúvida.
Qualquer coisa, compartilhe no fórum para podermos te ajudar.
Bons estudos, Hadassa!