Talk apresentada no Front In POA 2016.
Nela explico um pouco sobre as features disponíveis em JavaScript para fazermos meta programação e tento apresentar casos de uso reais e exemplos simples.
Indica se ela será listada por funções como Object.keys value enumerable writable configurable get set any boolean boolean boolean function function Property Descriptors
Indica se ela pode ser definida com o operador de atribuição (=) value enumerable writable configurable get set any boolean boolean boolean function function Property Descriptors
Indica se o descritor dessa propriedade pode ser alterado value enumerable writable configurable get set any boolean boolean boolean function function Property Descriptors
É a função que será invocada para acessar a propriedade value enumerable writable configurable get set any boolean boolean boolean function function Property Descriptors
É a função que será invocada ao atribuir um valor para a propriedade (operador de atribuição) value enumerable writable configurable get set any boolean boolean boolean function function Property Descriptors
FUNCIONAMENTO DE UM PROXY Proxy Wrapper target nome value: ‘João' sobrenome value: ‘João' handler get function set function const p = new Proxy(target, handler);
FUNCIONAMENTO DE UM PROXY Proxy Wrapper target nome value: ‘João' sobrenome value: ‘João' handler get function set function const p = new Proxy(target, handler); p
FUNCIONAMENTO DE UM PROXY Proxy Wrapper target nome value: ‘João' sobrenome value: ‘João' handler get function set function const p = new Proxy(target, handler); p.nome Pede a propriedade ao wrapper
FUNCIONAMENTO DE UM PROXY Proxy Wrapper target nome value: ‘João' sobrenome value: ‘João' handler get function set function const p = new Proxy(target, handler); p.nome Chama a trap get passando target e nome da propriedade
FUNCIONAMENTO DE UM PROXY Proxy Wrapper target nome value: ‘João' sobrenome value: ‘Silva' handler get function set function const p = new Proxy(target, handler); p.nome Devolve o retorno da função da trap get
Sugestões de Propriedades pessoa target nome value: ‘João' sobrenome value: ‘João' handler get function set function pessoa.seuNome Você quis dizer: "nome"?
symbols no mundo real pessoa nome value: 'João' sobrenome value: 'Silva' marcaTimestamp(pessoa) pessoa nome value: 'João' sobrenome value: 'Silva' timestamp value: 1481236691
symbols no mundo real pessoa nome value: 'João' sobrenome value: 'Silva' marcaTimestamp(pessoa) pessoa nome value: 'João' sobrenome value: 'Silva' timestamp value: 1481236691 Facilmente sobrescrito por engano
symbols no mundo real pessoa nome value: 'João' sobrenome value: 'Silva' marcaTimestamp(pessoa) pessoa nome value: 'João' sobrenome value: 'Silva' symbol(time) value: 1481236691
symbols no mundo real pessoa nome value: 'João' sobrenome value: 'Silva' marcaTimestamp(pessoa) pessoa nome value: 'João' sobrenome value: 'Silva' value: 1481236691 symbol(time) nunca haverá conflito!