Usando “With”

Realmente estou sem criatividade alguma para escrever ultimamente, mas continuo tentando. Hoje o assunto volta a ser JavaScript.

Provavelmente esse é um dos comandos JavaScript que é bem pouco usado, o with. Nem sei se há muita gente que conhece (se existe, eu nunca vi). Em suma, ele modifica o escopo temporariamente, ou seja, dentro de um bloco marcado com with, todas as variáveis se referem a um objeto definido. Em um código fica mais fácil de entender:

var eu = {
  "firstName": "Julio",
  "lastName": "Greff",
  "address": "http://juliogreff.net"
}
with(eu) {
  alert(firstName + " " + lastName);
}

As duas variáveis usadas dentro do with se referem ao objeto eu (poderia ser um array, uma string, um número). É o equivalente a eu.firstName e eu.lastName.

Dessa maneira não parece muito útil. Mas e se você estivesse lidando com um XML gigantesco? É, aí ia fazer muito sentido. Por isso achei interessante usar isso em meus próximos códigos usando Ajax e XML.

Podemos usar isso com qualquer variável. Veja:

var string = "Testando With";
var array = ["Maçã", "Laranja", "Limão"];
var obj = { "firstMember": "Primeiro Membro", "other": ["Segundo Membro", "Terceiro Membro"]};
with(string) alert(toLowerCase());
with(array) alert(join("-"));
with(obj) alert(firstMember + ", " + other.join(", "));

Não sei quanto a vocês, mas eu achei completamente estranho utilizar algumas funções sem os objetos. Creio que isso diminua um pouco a quantidade de código, e evita a criação de variáveis para “abreviar” objetos “aninhados”. É lógico que em duas ou três linhas apenas isso não será necessário.

Até a próxima!

Posts Relacionados

Postado em janeiro 04, 2007 às 20:39

Comentários

  1. Ramon

    eu trabalho isso muito com VB e PHP, mas no VB, por exemplo, eu tenho que colocar um .(ponto) na frente.

    abraços…
    bom 2007 pra você


  2. Leandro Vieira Pinho

    Interessante Júlio, eu não conhecia esse recurso do JavaScript.

    A minha dúvida é com relação a performance, ou seja, usar assim:

    with(eu) {
    alert(firstName + ” ” + lastName);
    }

    seria mais rápido, ou consumiria mais memória? Ao invés de:

    alert(eu.firstName + ” ” + eu.lastName);


  3. Bernardo Rufino

    Isso só é bom quanto tem declarações grandes como de estilo que tem que fazer “obj.style.color…”. Muito bom, sempre usei…


  4. Micox

    Muito bom. Também só conhecia no VB.
    VAleu Julio.


  5. JulioGreff

    Respondendo ao Leandro: não tenho grande certeza, mas pela lógica o uso de memória será menor apenas em declarações grandes, como o Bernardo disse. Em coisa pequena vale mais a pena colocar direto.


Deixe seu comentário