Nome:
Local: Rio de Janeiro, RJ, Brazil

Que perguntinha hein?! Mas vamos lá, adoro estudar assuntos relacionados à web, sempre que posso aprendo uma tecnologia, técnica ou linguagem nova. Tento sempre ver quais são as tendências e acompanha-las, enfim eu sou um eterno aprendiz. Deixando o lado profissional, entrando no lado pessoal, sou uma pessoa super gente-boa (pelo menos eu me acho. rs), adoro curtir a night, sair com os amigos, fazer novas amizades e viajar (tem coisa melhor do que isso?) Acho que você já está sabendo demais sobre mim. Fuiii...

quarta-feira, 9 de janeiro de 2008

Inspecionando propriedades com o watch

Vamos nessa que o tempo ruge e a sapucaí é grande!
Cada vez que leio um pouco mais sobre desenvolvimento, mas eu vejo que tenho que estudar, isso de certa forma é bom, pois nunca haverá alguém bom o suficiente que não tenha o que aprender é aquela velha frase "Estudar (Ler) é um universo em desencanto", agora que viajamos um pouco voltaremos ao tema. Essa função watch, é muito interessante e não vejo muita gente comentando sobre ela por aí, então resolvi trazer esse assunto. Tomará que para você seja inédito o uso dela, pois fiquei super empolgando quando descobri a engine da coisa.

Watch

Definição: Executa uma função específica quando é atribuído um valor à propriedade observada.
Sintaxe: instObj.watch(propriedade, função);
Obs: a propriedade fica entre aspas dupla (").

No final das contas, ele funciona como um debugador.

Código:

objeto = {propriedade:"funciona ?"}
objeto.watch("propriedade", handler);

function handler (id, velhoVal, novoVal) {
//Confirmo se o usuário quer receber o novo valor da propriedade, senão continua com o mesmo valor.
return (confirm("objeto."+id+" era"+velhoVal+" agora é "+novoVal+". Deseja receber o novo valor?"))?document.write(novoVal): document.write(velhoVal);
}

objeto.propriedade = "Claro que sim";


Explicando o código acima:
linha 1 -> Crio um objeto, no qual a propriedade recebe o valor (funciona?)
linha 2 -> Mando o javascript inspecionar a propriedade (propriedade) do objeto (objeto) chamando a função handler.
linha 3 -> a função handler, como pode-se observar possui 3 parâmetros (id, velhoVal, novoVal), são parâmetros padrão e não é possível passar outros parâmetros à essa função (até onde eu sei, pelo menos), onde estes por sua vez são:
. id -> Identificação da propriedade que é inspecionada.
. velhoVal -> O valor antigo da propriedade.
. novoVal -> O valor novo da propriedade.
Obs: Manter a ordem dos parâmetros.
linha 4 -> Texto de exibição
linha 5 -> Essa linha é importante, é o valor que a propriedade irá conter, se você não der um retorno para essa função a propriedade vai ter o valor undefined. Com esse watch pode-se atribuir qualquer valor de retorno à essa propriedade. Chocante né?!

linha última -> Troco o valor da propriedade para o handler ser executado.

Todos os objetos, descendem essa função.

Mais uma coisa, se você não quiser mais "inspecionar" a propriedade usa a função unwatch.

Usando o mesmo exemplo.
Código:

objeto.unwatch("propriedade");


Divirtam-se, pois achei isso o máximo

[UPDATE]
Na linha do retorno do novo valor, pus um document.write para exibir apenas o valor da variável, dessa forma é possível visualizar toda a operação
Como observado pelo Micox, o IEca não dá suporte à essa propriedade
[/UPDATE]
Fuiii...

Marcadores:

3 Comentários:

Blogger Micox - Náiron J. C. G. disse...

OPa, bão demais. Eu também não conhecia.
Mas tem que ver se vale pra qualquer navegador. Na referencia do MDC diz que é só pro Firefox 1.2.

Testei no FF aqui e estranhamente apareceu a tela de impressão. O que será que eu fiz de errado??!?!

NO Ie falou a velha mensagem que o objeto não dá suporte.

15 de janeiro de 2008 14:05  
Blogger ramon disse...

Opa Micox,
Esqueci de mencionar que no IEca não funfa! :(

Seria pedir demais né?! Vamos ver se no IEca 8, já virá com suporte à isso.

Tela de impressão?! o.O

Pode me passar por e-mail o seu código para eu dar uma olhada?

Fuiii...

16 de janeiro de 2008 12:32  
Blogger Israel Teixeira disse...

Bem interessante, não conhecia tb!

16 de janeiro de 2008 13:01  

Postar um comentário

Assinar Postar comentários [Atom]

<< Página inicial