As Vantagens de Prototype
Alguns não gostam, alguns adoram, outros usam de vez em quando. O prototype (não o framework), apesar de aumentar um pouco a quantidade de código, pode ser muito útil em certas aplicações. Em outras, nem tanto.
Como já expliquei, o prototype não sobrescreve nada que já esteja definido, portanto, é necessário prestar atenção em um pequenino detalhe.
Há uns tempos atrás, tive um certo problema com a construção do FrameWorX. Não conseguia acessar uma variável que estava fora de uma função que estava usando, mas ainda dentro da classe. Na tentativa-e-erro (leia-se POG), descobri como acessa-la: o prototype. O problema foi que ele não sobrescrevia o valor false. Portanto, nada podia ser definido.
O Princípio
O princípio para o prototype sobrescrever algo é o seguinte: criar esse “algo” com ele mesmo.
function errado() {
this.variavel = "";
}
errado.prototype.variavel = "Outra coisa"; // Assim não dá certo!
function certo() {
// Não tem nada definido aqui dentro!
}
certo.prototype.variavel = "Outra coisa"; // Assim funciona!
Esse método pode ser usado dentro de métodos privados para acessar variáveis públicas (meu eterno problema foi resolvido!), funções autônomas (aquelas que não tem nome, tipo window.onload = function() {…}) ou para criar toda a classe.
Criando a Classe
Podemos criar a classe inteira com o prototype. Os métodos e propriedades podem ser adicionados através dele, e inclusive o corpo do construtor, e nada ficaria dentro da definição da função.
Nesse caso, nem sempre é uma boa. Não sei quanto à questão do desempenho, mas o código fica sensivelmente maior, às vezes desnecessariamente.
Espero que não tenham ficado dúvidas. Qualquer coisa, comente!







Já tive problemas com acesso a variáveis da classe tentando puxar esta variável dentro de uma função dessa classe.
Eu não entendi direito.
Tem como postar o exemplo de como vc conseguiu não?
É só chamar ela via prototype? Pega o valor??
É como criar a classe a partir do prototype, parecido com modulos em Ruby. Mas ali você disse em metodos e variaveis privadas e publicas, o Javascript permite encapsulamento, herança, essas coisas??
Atah, eh como se fosse um encapsulamento meio que feito a pressa. Quando se declara var, é uma variavel de escopo local e não uma propriedade/metodo privado, e o this serve para publico neh?! Pq já tava imaginando eu declarando protected, public e private no Js.. hehehe
Bernardo: é isso aí mesmo, é “simulado”, a OO do JavaScript é bem fraquinha.
Micox: pra pegar a variável:
var qualquer_coisa = Classe.prototype.variavel;
Pra modificar:
Classe.prototype.variavel = “Valor Novo”;
Julio,
do outro post do prototype, eu tive uma dúvida, e agora é o momento certo de tira-la, pelo menos eu acho :).
Exemplo:
var qualquer_coisa = Classe.prototype.variavel;
Eu pensei, no inicio, que o prototype transformava a variavel em propriedade, mas depois eu vi que estava viajando, pois como isso é uma classe, classe não tem propriedade, agora eu pergunto, meu raciciocinio está correto ou não?
Está, mas não o exemplo. Naquele exemplo, você colocou o valor de uma propriedade (variável de dentro do objeto) na variável. Se fosse ao contrário, aí sim teríamos criado (ou modificado) uma propriedade
Valeu Julio.
valeu, é que eu tinha me expressado errado, muito legal isso dele poder alterar o valor…