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...

terça-feira, 11 de setembro de 2007

This Ou That - Qual Usar

Desculpem a demora nos posts, mas minha vida está muito corrida, vários projetos, várias coisas pra fazer e o dia infelizmente só tem 24 hrs. Mas como eu sempre digo (ou pelo menos disse uma vez) Vamos embora que o tempo ruge e a sapucaí é grande.

Pois bem, gosto muito de Javascript, mas ele tem certas falhas de implementação (ou assim penso), que não são muito legais, hoje iremos falar do problema com a propriedade this:


function minhaClasse () {
this.metodo1 = function() {
this.meuValor = 5;
}

metodo2 = function() {
return 10;
}
}


Essa é a forma que costumo implementar classes, não que seja a melhor, mas é a forma que gosto de fazer, existem diversas formas, cabe a você, escolher a que mais agradar. Como visto acima, tenho dois métodos:

Metodo 1: Vê-se que a função tem um this na frente o que significa que o método é público. O método seta a variável meuValor um valor de 5 essa variável como pode-se observar ela também é publica, this na frente da variável,(fora do objeto, pode-se pegar o valor dela).

Metodo 2: Essa função não tem o this na frente, ou seja, ela é privada. Quando ela é chamada apenas retorna o valor 10.

Até aqui, Neves, não tem nada demais, o problema vem agora:


function minhaClasse () {
this.metodo1 = function() {
return 10;
}

metodo2 = function() {
this.meuValor = 5;
}
}


Acima inverti o conteúdo das funções, porém não inverti a "indentidade" (metodo1 -> publico; metodo2 -> privado) e por isso daria erro ("função meuValor não identificada"), pois segundo a especificação da ECMAScript, métodos privados não podem chamar métodos, variáveis, ou seja lá o que for, públicos. Para fazer com que o exemplo acima funcione é necessário utilizar um método privilegiado (detalhes, sobre isso em um próximo post).

Resolvendo - Irá ser necessário criar uma variável global à classe que irá receber o valor this, que comumente é chamado de that e toda vez que tivermos uma função privada e necessitarmos utilizar algo público, ao invés de usarmos o this, utilizaremos o that. Exemplificando, pois com essa explicação até eu me enrolei:


function minhaClasse () {
var that = this;
this.metodo1 = function() {
return 10;
}

metodo2 = function() {
that.meuValor = 5;
}
}


Com essa simples variável é possível resolver o problema!

Espero que isso seja útil para alguém, pois para mim foi muito. Vou ver se no próximo post continuo com algo de objeto.

Fuiii...

Marcadores: , ,

4 Comentários:

Anonymous Anônimo disse...

Hmmm, nunca havia pensado dessa maneira. Eu costumo utilizar prototype, mas isso me parece bem melhor...

11 de setembro de 2007 às 22:40  
Blogger ramon disse...

Show, com o prototype é legal, mas também prefiro aquele (ops, that).


fuiii...

12 de setembro de 2007 às 09:52  
Blogger Micox - Náiron J. C. G. disse...

Ooopa, muito bom.

13 de setembro de 2007 às 08:22  
Blogger ramon disse...

Valeu ai micox

13 de setembro de 2007 às 09:33  

Postar um comentário

Assinar Postar comentários [Atom]

<< Página inicial