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!







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ê
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);
Isso só é bom quanto tem declarações grandes como de estilo que tem que fazer “obj.style.color…”. Muito bom, sempre usei…
Muito bom. Também só conhecia no VB.
VAleu Julio.
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.