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:
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:
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:
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...
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: JavaScript, POO, Programação
4 Comentários:
Hmmm, nunca havia pensado dessa maneira. Eu costumo utilizar prototype, mas isso me parece bem melhor...
Show, com o prototype é legal, mas também prefiro aquele (ops, that).
fuiii...
Ooopa, muito bom.
Valeu ai micox
Postar um comentário
Assinar Postar comentários [Atom]
<< Página inicial