sábado, 8 de junho de 2019

Javascript - Proxy

Chega de tentar manter o controle das variáveis pelo escopo global, e de resistir à programação orientada a objetos. As novas frameworks do mercado Web, voltadas para javascript, colocaram tudo dentro de objetos, e mantem rígido controle sobre propriedades, e não mais valores soltos de variáveis, que tornam a vida do programador um inferno.

Manipulador de atribuição e recuperação

Usaremos um manipulador de atribuição (set) e recuperação de propriedades (get) bem simples, para todo conjunto de parâmetros proxiados de uma script javascript:

var handler = {
    get: function(obj, prop) {
        return name in target ? target[name] : null;
        },
    set: function(obj, prop, value) {
        obj[prop] = value;
        }
};


Vamos definir, igualmente, um objeto proxiado "p":

var p = new Proxy({}, handler);

Quando a página for carregada, vamos carregar a função init(), que faz as atribuições. Este é o método correto para garantir que toda a página e suas scripts estejam carregadas, antes que qualquer instrução possa ter sido executada:

function init(){
    p.a = 144;
    p.b = 225;
    }

Página completa

<script>
var handler = {
    get: function(obj, prop) {
        return prop in obj ? obj[prop] : null;
        },
    set: function(obj, prop, value) {
        obj[prop] = value;
        }
};

// Propriedade/Variável a ser proxiada
var p = new Proxy({}, handler);

function init(){
    p.a = 144;
    p.b = 225;
    }
</script>
<body onload="init();alert(p.a)">
</body>

Execução

Vamos utilizar o navegador Chrome para o debug da script:

Vejamos o que será feito em relação a esta atribuição, seguindo o debug:

O objeto em questão "p" terá sua propriedade "a" definida com valor 144. Este objeto é realmente um array.

Vamos saltar para o método de recuperação, quando for emitido o alert(p.a):


 A chamada alcança o método "get" do handler de objetos. Como a propriedade pertence ao objeto, o valor do item do array é correspondente.

Aumentando a eficiência

Mas a eficiência e a proteção das "variáveis" proxiadas aumenta com o expediente de se fazer o proxiamento ser um comportamento natural de objetos instanciados por funções anônimas, associado à camada de exibição das páginas HTML

Trataremos disto em nosso próximo encontro neste blog.

Nenhum comentário:

Postar um comentário