Eu ganho algo utilizando Reflect.get
numa trap
de Proxy
, ao invés de utilizar target[prop]
?
Eu ganho algo utilizando Reflect.get
numa trap
de Proxy
, ao invés de utilizar target[prop]
?
Reflect.get é mais flexivel e retorna uma função por debaixo dos panos.
Mas, na prática, o que muda? Se eu utilizo target[prop]
a property
get
em questão é chamada, e o atributo não é acessado diretamente... O que você quer dizer com mais flexível?
O reflect get retorna uma função que tornará uma propriedade um getter. Lembre-se nas aulas que um getter é uma função que executa um código e é acessada como se fosse uma propriedade. Nela você pode colocar um código arbitrário.
Resumindo: use Reflect.get sempre que possível para estar em conformidade com o Es6. Esss orientação mais geral é muito válida.
Mas se eu utilizo target[prop]
, o getter para prop que foi definido na classe é executado normalmente. Na prática, não vi motivo para utilizar Reflect.get. Consegue me dar um exemplo onde tenha alguma diferença?
Tenho sim, o da propria especificação:
https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get
Consegue enxergar que um.código arbitrário é executado na leitura da propriedade?
Foi Carlos? Se não foi ainda na segunda elaboro um exemplo exclusivo para fecharmos essa questão. Estou sembmeu mac no local que estou.
"The static Reflect.get() method works like getting a property from an object (target[propertyKey]) as a function."
Na própria especificação diz que funciona como acessando uma propriedade de um objeto.
Ainda não vi diferença prática. =/
Isso! Property é uma função acessada como propriedade! Eu ensino isso no módulo I!!!!!!
Se é uma função você pode executar um código arbitrário. É a mesma coisa em C#.
Fez o primeiro módulo?
Editado..resposta no final
Acho que a dúvida não ficou clara. Fiz os 2 últimos módulos sim e trabalho com desenvolvimento web há um bom tempo (não estou começando com JavaScript rsrsrs).
O que eu estou dizendo, é que se eu uso target[property], e na minha classe property é um getter (get property()), esse código é executado, exatamente da mesma forma que seria se eu utilizasse Reflect.get(target, property).
A dúvida não está no funcionamento de um getter. Isso está bem claro. A dúvida é a diferença prática entre target[property] e Reflect.get(target, property), levando em conta que, como eu falei, em ambos os casos o método get property() é chamado, executando assim o código arbitrário que lá estiver, entendeu?
Ok..use um outro quando quiser. Mas a api Reflect foi criada para padronizar.
Segue um exemplo do que eu estou dizendo: https://uploaddeimagens.com.br/imagens/reflect-jpg
Ambos têm o mesmo resultado.
O que posso fazer é dar os dois exemplos na resposta. O que acha?
A API de reflexão foi criada depois e visa centralizar essas operações em um único lugar. Eu falo isso no video. Entendi agora que sua dúvida não é no getter.
Então na prática ambos são realmente iguais, certo? Só seria utilizado o Reflect para manter um padrão?
Isso Carlos. Eu viajei com sua pergunta e ela era mais simples do que eu imaginava. É mais fácil você dizer para a equipe usar reflect que possui essa responsabilidade.
Desculpe a confusão. E olha que cheguei a pensar que você estava começando com js, isso porque não tinha realmente captado a essência da sua pergunta.
Sei que aqui não é o lugar, mas queria te parabenizar. Sua didática é muito boa. Gosto muitos dos seus treinamentos.
Abraços e obrigado pela paciência para esclarecer a dúvida!
:-D
Obrigado pelo retorno. Nem sempre capto a dúvida de primeira.
Prepare-se para o módulo 3 do curso! Lá você ficará ainda mais fera em promises, usará módulos do es6, usará a maravilhosa fetch api, aplicará novos padrões de projetos e aprenderá a trabalhar com um banco que roda no browser. Por fim..aprenderá a usar babel, um transpiler muito famoso.
Sucesso e bom estudo!
Já estou fazendo. Estou na metade dele!
:-D
Parabéns pela dúvida do Carlos, eu também estava com certa dificuldade de entender essa parte. E parabéns ao instrutor Flávio, eu adoooro sua metodologia de ensino. Finalmente to entendendo bem JavaScript :)