O que é Proxy no Javascript?
Como usar o Proxy no Javascript? E por quê usa-lo?
O Proxy normalmente é um intermediário para ações entre o usuário e seu servidor. Mas no javascript o Proxy é usado para criar um comportamento customizado para um objeto, como definir ações para determinado comportamento.
Uso simples
Seu uso é bem simples, precisa apenas de um target (que é um objeto) e um handler que definirá o comportamento customizado:
Exemplo
Neste caso o target sera o objeto pessoa
E o comportamento customizado será usando a trap (armadilha) no set, ou seja, quando alguém definir um novo valor para qualquer propriedade do objeto ele que irá interceptar esta ação.
Agora que o target e o handler estão definidos, basta apenas instanciar o objeto Proxy
Então quando alterar alguma propriedade do proxy nosso comportamento customizado sera chamado
Tipos de traps (Armadilhas)
Traps nada mais são que os tipos de armadilhas que pode ter dentro de um handler, ou seja, qual ação vai disparar o proxy. Listei abaixo as que acho mais uteis:
Como visto acima o set é disparado quando alguem define um novo valor para uma propriedade.
Observação se não atribuir o value ao objeto target ele não atualizará o valor
O get é disparado toda vez que alguém solicitar alguma propriedade daquele objeto.
O has é muito parecido com get, porém dispara quando é verificado se existe aquela propriedade naquele objeto.
O deleteProperty por sua tradução já diz tudo “excluir propriedade”, é exatamente assim que essa armadilha é disparada, toda vez que alguem tentar excluir uma propriedade.
O defineProperty também por sua tradução já diz tudo “definir propriedade”, é exatamente assim que essa armadilha é disparada, toda vez que alguém tentar criar uma nova propriedade.
Uso real
Não é muito interessante para executar ações simples. Mas pode se tornar muito interessante e util para deixar o código mais limpo e reutilizável. Alguns exemplos são:
- Validações
- Correção de variáveis
- Implementar ações no DOM
- Restringir acesso a valores
- Extender objetos nativos do javascript.
Suporte
Seu suporte já esta em 86,99% com base em usuários atingidos, segundo o can i use então pode usar tranquilo. Claro que se estiver usando um transpilador como Babel não precisa nem se preocupar com isso.
Conclusão
É sempre bom sair do “arroz e feijão” do javascript conhecer novos objetos, funções e características que facilitam ou até mesmo ajudam a limpar nosso código. Nesse caso acho que o Proxy em grande parte veio para limpar nosso código e deixa-lo mais legível e reutilizável. Como Addy Osmani disse “Embora estejamos despedindo de Object.observe() agora é possível termos um possível polyfill usando o Proxy”