O JavaScript pode implementar getters/setters dinâmicos?
Getters e setters dinâmicos permitem que objetos JavaScript lidem com acesso e modificação de propriedades além das propriedades predefinidas. Embora as técnicas anteriores de JavaScript empregassem getters e setters específicos para propriedades conhecidas, este artigo explora a possibilidade de implementar getters e setters abrangentes para quaisquer propriedades indefinidas.
Proxy ES2015: uma solução dinâmica
ES2015 introduziu proxies JavaScript, que permitem a criação de objetos que servem como intermediários para outros objetos. Esse recurso abre getters e setters dinâmicos:
const original = {
example: "value",
};
const proxy = new Proxy(original, {
get(target, name, receiver) {
if (Reflect.has(target, name)) {
let rv = Reflect.get(target, name, receiver);
if (typeof rv === "string") {
rv = rv.toUpperCase();
}
return rv;
}
return "missing";
},
});
console.log(`proxy.example = ${proxy.example}`); // "proxy.example = VALUE"
console.log(`proxy.unknown = ${proxy.unknown}`); // "proxy.unknown = missing"
Neste exemplo, o objeto proxy intercepta o acesso à propriedade do objeto original. Ao acessar uma propriedade string, o proxy a converte para maiúscula e a retorna; para propriedades desconhecidas, ele retorna "ausente" em vez de indefinido.
Esta implementação é compatível com vários navegadores se o navegador suportar ES2015 (ES6). Para navegadores mais antigos, considere usar polyfills ou técnicas alternativas. Os proxies fornecem uma solução flexível para getters e setters dinâmicos, permitindo manipulação eficiente de propriedades e introspecção de propriedades sem modificar o objeto original.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3