Ir para conteúdo

POWERED BY:

Arquivado

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

M4n0w4r

[Resolvido] Problema com Orientação a Objetos

Recommended Posts

Olá galera, já codifiquei e procurei mas não achei a resposta para minha pequena dúvida, quem puder ajudar eu agradeço.

 

Tenho a classe pai com seus atributos

function pai () {
	this.nome = "João";
}

Agora tenho a classe filho que herda os atributos do pai

pai.prototype.pai = function () {
...
}

Para instanciar uma variável pública se usa "this.minhaVariavelPública = 'meuValor'". Minha pergunta é, como posso instanciar uma variável pública que se refira à classe "filho" se "this" se refere à classe pai ? Queria algo mais ou menos assim:

alert (pai.filho.corOlhos)

Obrigado galeraaaaaaaaaaaaaaa, flowwwwwwwwwwwwwwwwwwwwwwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi muito bem a sua dúvida, mas talvez os posts abaixo te ajudem em algo, ou pelo menos irá facilitar para você explicar melhor, com exemplo prático!

 

Eu trabalho com classes em JavaScript da seguinte maneira:

 

Com prototype:

<html>
<head>
<script type="text/javascript">

function objeto(id){
	this.id = document.getElementById(id);
}

var $ = function (id){
	var dom = new objeto(id);
	return dom;
}

objeto.prototype.Alpha = function(opacity) {
this.id.style.opacity = opacity/100;
this.id.style.filter = 'alpha(opacity='+opacity+');';
}
</script>
</head>
<body>
<div id="box" style="width:100px;height:100px;background:#333;"></div>
<a href="#" onclick="$('box').Alpha(60);">Alpha</a>
<br><br>
</body></html>

Outra maneira:

<html>
<head>
<script type="text/javascript">
function objeto(id){
	this.id = document.getElementById(id);

	this.Alpha = function(opacity) {
		this.id.style.opacity = opacity/100;
		this.id.style.filter = 'alpha(opacity='+opacity+');';
	}
}

function $(id){
	var dom = new objeto(id);
	return dom;
}
</script>
</head>
<body>
<div id="box" style="width:100px;height:100px;background:#333;"></div>
<a href="#" onclick="$('box').Alpha(60);">Alpha</a>
</body>
</html>

Referência: http://forum.imasters.com.br/index.php?/topic/322883-aprenda-a-aplicar-funcoes-a-elementos-como-se-fossem-nativas/

Compartilhar este post


Link para o post
Compartilhar em outros sites

A orientação a objetos provida pela ECMA é muito simples e bem perto de quase nenhuma, porém você consegue fazer isso com object masquerading:

 

function Pai( nome ){
 this.getCorOlhos = function(){ return this.corOlhos; };
 this.getNome = function(){ return this.nome; };
 
 this.setCorOlhos = function( cor ){
 this.corOlhos = cor;
 };
 
 this.setNome = function( nome ){
 this.nome = nome;
 };
 
 this.nome = nome;
}

function Filho( nome ){
 this.pai = Pai;
 this.pai();
 
 delete this.pai;
 
 this.nome = nome;
}

var pai = new Pai( 'Fulano' );
var filho = new Filho( 'Ciclano' );

pai.setCorOlhos( 'azul' );
filho.setCorOlhos( 'preto' );

alert( [ pai.getNome(), pai.getCorOlhos() , filho.getNome() , filho.getCorOlhos() ] );

A saída será:

Fulano,azul,Ciclano,preto

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado João Batista e Klonder pelas respostas, no entanto não fui muito claro em minha pergunta :P

 

Queria organizar o código de uma maneira mais hierárquica, quando me refiro a isso

alert (pai.filho.habilidadeUnica)

Quero retornar a habilidade única que somente o filho possui, e quando faço isso

alert (pai.corOlhos)

Quero retornar apenas a cor dos olhos do pai. Um exemplo de código seria mais ou menos assim

function pai () {
	this.corOlhos = "Preto";
}

pai.prototype.filho = function () {
	this.habilidadeUnica = "Poderes Mutantes"
}

Infelizmente "this" na função filho se refere a função "pai", por isso não consigo criar uma variável pública para "filho".

 

Vlw galera, quem puder dar mais uma forcinha eu agradeço =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

por isso não consigo criar uma variável pública para "filho".

 

Mas você consegue exatamente isso da forma que eu falei, por exemplo:

 

function Pai( nome ){
 this.getNome = function(){ return this.nome; };
 this.setNome = function( nome ){
 this.nome = nome;
 };
 
 this.setNome( nome );
}

function Filho( nome ){
 this.pai = Pai;
 this.pai();
 
 delete this.pai;
 
 this.setHabilidadeUnica = function( habilidade ){
 this.habilidade = habilidade;
 };
 
 this.getHabilidadeUnica = function(){
 return this.habilidade;
 };
}

var joao = new Pai();
var filho = new Filho();
joao.setNome( 'Joao' );
filho.setNome( 'Neto' );
filho.setHabilidadeUnica( 'programador' );

alert( [ filho.getNome() , filho.getHabilidadeUnica() , joao.getNome() ] );

Como pode ver, Filho herda do Pai os métodos setNome e getNome e consequentemente a propriedade pública nome, mas somente o Filho possui os métodos setHabilidadeUnica e getHabilidadeUnica e a propriedade habilidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe por não ter dado mais atenção ao seu código João, acho que se devia ao fato de você chamar a classe assim

var filho = new Filho( 'Ciclano' );
filho.setCorOlhos( 'preto' );

E eu estava pensando que podia chamar a classe hierarquicamente desse jeito

var pai = new pai ();
alert (pai.filho.setCorOlhos ("preto"))

Ledo engano, acho que isso deve ser impossível. Obrigado pela ajuda :)

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.