Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Santiago

Classe em javascript...

Recommended Posts

Olá a todos!Eu tenho a seguinte duvida:Para eu criar um objeto e inicia-lo tenho que criar uma função construtora e iniciar as propriedades do objeto nela. Até ai tudo bem.Mas eu gostaria de saber se também podem ser criados métodos dentro da função construtora ou os metodos devem ser criados fora dela?Outra questão é: Se eu puder criar os metodos dentro da função construtora, qual é a influencia disso no desempenho da execução do código (tipo o meu código irá demorar mais para ser executado ou ocupará mais memoria)?E a ultima: Ainda se eu puder criar os métos dentro da função construtora é mais proveitoso criar os métodos dentro da função construtora ou usar o objeto PROTOTYPE?Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

hauahuhua quanta pergunta!

quando eu passei por isso, a melhor forma que encontrei foi essa:

 

function Janela() {  var janela = {	variavel1: 'Seja',	varialve2: 'Feliz!',	open: function(parameters) {	  alert('Entrou!\n' + parameters + '\n' + variavel1 + '\n' + variavel2);	  return true;	},	close: function() {	  delete this.variavel1;	  delete this.variavel2;	}  }  return janela;}var win = new Janela();win.open('teste'); //Abre alert escrito: Entrou!\nteste\nSeja\nFeliz!
win.close();

 

Abraços, t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oba. Até que enfim achei brodis que querem discutir Orientação a Objetos no javascript. heheh

 

Seguinte:

 

Eu gosto de criar os métodos da minha classe tudo dentro. Assim parece que o código fica mais organizado. Não sei qual é o impacto disso no desempenho não. Não gosto de ficar usando o prototype em minhas próprias classes não...

 

Um exemplo:

<script>function Janela(parametro){	var variavel1 = "só vejo esta var de dentro"; //var privada	this.variavel2 = "vejo esta var de fora também";// var public	//chama o construtor	construtor(parametro)	funcaoPrivate("este é private. só chamo de dentro da classe")	function construtor(oque){		/*o que está dentro deste construtor também poderia estar	  fora, dentro só do Janela, so que assim fica mais organizado */		alert("este é o construtor" + oque)	}  	function funcaoPrivate(parameters) {	  //A THIS.VARIAVEL2 TÁ RETORNANDO UNDEFINED. COMÉ QUE EU FAÇO PRA RECUPERAR ELA???	  alert('Só no private voce vai ver esta mensagem\n' + parameters + '\n' + variavel1 + '\n' + this.variavel2);	  return true;	}	this.funcaoPublic = function(parameters) {	//JÁ ESTA QUE É PÚBLICA, EXIBIU AS DUAS VARIAVEIS CORRETAMENTE	alert('Esta aqui está public\n' + parameters + '\n' + variavel1 + '\n' + this.variavel2);	}		return this;}nova_janela = new Janela("vivaaa");nova_janela.funcaoPublic("esta é public. posso chamar de fora")alert(nova_janela.variavel1);//não vai rodar pois é privadaalert(nova_janela.variavel2);// vai rodar pois é publica</script>

Tipo, voces devem ter visto os textos que tão em MAIÚSCULA. Lá é minha dúvida:

- Por que de dentro de um método privado eu não posso chamar minha variável pública?

- Comé que eu faço pra chama-la de dentro do método privado?

 

Outra coisa é a sintaxe do dois pontos ( : ) que eu não conhecia e o Fleury vai me explicar ela. Eu só conhecia o igual (=) hehe

 

Falows...

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ai caras!Vlw pela ajuda você's solucionaram as minhas duvidas (menos sobre a questão do desempenho).Agora MICOX sobre a primeira questão eu posso até estar falando besteira, mas eu acho que você não pode usar a this.variavel2 desta maneira porque ela é uma propriedade da class!Mas como eu disse posso estar falando besteira pois to começando a estudar isso agora.Mas vou dar uma estudada nesse assunto!E sobre esse negócio de sintax de : como funciona? isso realmente é novo p/ mim!rsrsSe você poder explicar ou o Fleury ia ajudar bastante.Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

ei micox, tenho a teoria de que JS não foi feito para trabalhar com public e private =xOO dele é bem fraquinha :(talvez na proxima versão melhoremas acho que não tem necessidade de ter funções e variaveis private dentro do escopo da classe...

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas acho que não tem necessidade de ter funções e variaveis private dentro do escopo da classe...

Mas TEM e FUNCIONA.

Olha minha variavel 1 lá. Ela é private. Só funciona dentro da classe. E é muito útil sim.

Tem classes em que é necessário sim por motivo de encapsulamento.

 

O que eu não consegui foi enxergar variável PUBLIC dentro da própria classe. Se alguém souber como faz...

 

tenho a teoria de que JS não foi feito para trabalhar com public e private

Uai. Olha minha classe lá... Ela funciona cem por cento e tem métodos public e private dentro dela.

Tá certo que não chega a ter uma orientação a objetos completa como Java. Mas tem sim, bem funcional pro nível do javascript.

 

Mas voce ainda não explicou o lance do dois pontos heheh

Compartilhar este post


Link para o post
Compartilhar em outros sites

e se o que tivermos fazendo na verdade é só simulação de POO???continuo achando que JS não foi feito pra trabalhar com public e private

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser só simulação, o que for, mas se tá atendendo minhas necessidades é o que importa pra mim .heheheMas voce ainda não respondeu a pergunta do dois pontos. heheheTá querendo deixar nóis curioso é? heheh

Compartilhar este post


Link para o post
Compartilhar em outros sites

Concordo com o Micox, pode até ser que javascript apenas simule, mas trabalhando com classes o código (dependendo da estrutura que o programador fez) fica bem mais funcional, e porque não falar bonito!E porque você não acaba com esse segredo e revela logo essa sintax de :.Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode até ser que javascript apenas simule, mas trabalhando com classes o código (dependendo da estrutura que o programador fez) fica bem mais funcional, e porque não falar bonito!

FAlou tudo santiago. maass... E a sintaxe do dois pontos heim Fleury?? hehehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hehehehe eu sou mal! http://forum.imasters.com.br/public/style_emoticons/default/devil.gif

Não conto não conto e não conto hahaha http://forum.imasters.com.br/public/style_emoticons/default/lock.gif vou dominar o mundo utilizando os dois pontos hahahaha

 

Foram mês e mês de pesquisa xD

 

Brincadeira gente :)

 

 

 

Hash Map

 

var nomeHashMap = {

chave1: 'valor1',

chave2: 'valor2',

chave3: 'valor3'

}

 

A chave é o nome da "sub-variavel".

Você pode declarar uma função como valor de uma chave.

Cada chave deve ser separado por virgula.

 

Lendo valores:

alert('nomeHashMap[\'chave2\'] = ' +nomeHashMap['chave2']); // Retorna valor2

alert('nomeHashMap.chave2 = ' + nomeHashMap.chave2); // Retorna valor2

 

Listando chaves e valores

var list = '';

for (chave in nomeHashMap)

list += '\nnomeHashMap.' + chave + ' = '+ nomeHashMap[chave];

alert(list);

 

 

Importante:

apesar de parecer um array, algumas funções de array não funcionam.

hm.length;

hm.push(item);

hm.pop(item);

 

Quer dizer, se tem como funcionar, eu ainda não descobri :P

 

Abraços, t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ummm interessante. Não sabia que tinha essas viagem no javascript não...Conhecia isso no VB. No JS não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tive um grande problema e dei uma estudada pra encontrar a solução.

 

1- Do modo como eu estou fazendo, funciona? Funciona, mas há um problema muito grande.

A memória do javascript no browser é limitada a 32kb.

No meu modo, você escreve a classe, variaveis e funções todas dentro de uma váriavel que será tratada como objeto. Só que isso faz com que você atribua uma quantiadade enorme de código dentro de uma váriavel. Então se você estiver realmente desenvolvendo um aplicação para web e a soma do tamanho de suas classe ultrapassar 32kb, já era. O JS nem será carregado.

 

2- A recomendação é fazer assim como o Micox fez, só que como eu já havia dito, o JavaScript Orientado a Objetos é muito limitado e então não há váriaveis privadas. Somente públicas.

Elas devem ser atribuidas assim:

this.publicVar = "O carro é muito bonito.";

 

Vejam mais profudamente:

<script language="javascript" type="text/javascript"><!--// ==========================// =   SuperClasse Gato com construtor   =// ==========================function Gato(nome) {	this.nome = nome;	this.falar = function() {		alert( this.nome + " disse meeow!" )	}	this.mudarNome = function(nome) {	  this.nome = nome;	}}// Cria uma instancia de Gatogato1 = new Gato("felix");gato1.falar(); //alerta "felix disse meeow!"gato1.mudarNome("xis");gato1.falar(); //alerta "xis disse meeow!"// ==========================// =	 SubClasse Gato com construtor	=// ==========================function Persa(nome,cor) {  this.gato = Gato; // Herda todas os atributos e funções definidas no corpo da classe Gato. !Atenção! Funções criadas por prototype não serão herdadas  this.gato(nome);  // Inicia gato  this.cor = cor;}// Cria uma instancia de Persavar gatinho = new Persa("Mustafar","Marrom");alert("Gato Persa\n" +	  "\nNome: " + gatinho.nome +	  "\nCor:  " + gatinho.cor);			gatinho.mudarNome("Sebastian");gatinho.falar(); // Alerta "Sebastian disse meeow!"// Cria uma função na classe Persa fora do corpo da classePersa.prototype.mudarCor = function(cor) {  this.cor = cor;}gatinho.mudarCor("Cinza");alert(gatinho.nome + " agora é " + gatinho.cor);--></script>

Abraços, t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uai Fleury, é possível sim colocar variáveis privadas.

Olha meu código lá.

Eu coloquei

var variavel1 = "só vejo esta var de dentro"; //var privada
dentro da minha classe e esta variável NÃO É VISÍVEL de fora da classe, configurando assim uma variável privada.

Declara uma variável usando var dentro do seu codigo pra voce ver se ela não fica privada.

 

No mais, tá SUPER SHOW DE BOLA, muito completo. Muito bom.

Rolava de voce publicar um tutorial disso em algum local (site principal do imasters por exemplo). Tem poucas coisas disso em português, voce sabe. E seria muito bom se voce publicasse.

 

Té mais...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente variaveis privadas funcionaram!

Fiz aquela afirmação com base no seu exemplo.

 

Ficou assim então:

//SuperClassefunction Gato(nome) {  var humor = "feliz";	this.nome = nome;	this.falar = function() {		alert( this.nome + " " + humor + " disse meeow!" )	}	this.mudarNome = function(nome) {	  this.nome = nome;	}}// Cria uma instancia de Gatogato1 = new Gato("felix");gato1.falar(); //alerta "felix disse meeow!"alert("Gato está: " + gato1.humor + " mas seu nome é " + gato1.nome); // Não mostra humor pois é privada mas mostra o nome pois é publica

Vou elaborar algo mais apresentavél.

Abraços, t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Elabora mesmo e manda pros caras do imasters.Se tiver dúvidas, fala com algum admin que eles te passam o email e os esquemas de publicar no site.Acho que eles tão precisando de conteúdo de qualidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.