Jump to content


Photo

Orientação A Objetos


  • Faça o login para participar
11 replies to this topic

#1 fekz

fekz

    12 Horas

  • Usuários
  • 243 posts
  • Sexo:Não informado

Posted 07/08/2008, 12:23

Estou tentando começar a aprender objetos e métodos. Criar um objeto new e usa-lo de maneira adequada, mais o tutorial que peguei não me explica direito.

function metodo1() {
document.write("Saldo: " + this.saldo");
}

function Conta(corr, saldo) {
this.correntista = corr;
this.saldo = saldo;
this.imprimeSaldo = metodo1;
}

cc1 = new Conta("Fernando", 800);
cc1.imprimeSaldo();

Como acessar esses dados? Não está aparecendo na tela: "Saldo: 800.

O que está errado? Valeu

#2 malukocs

malukocs

    Turista

  • Usuários
  • 31 posts
  • Sexo:Não informado

Posted 07/08/2008, 12:29

Você colocou aspas a mais la cara:

Seu codigo:
document.write("Saldo: " + this.saldo");

Tirado aspas:
document.write("Saldo: " + this.saldo);

Testei aqui e funcionou.
Falou abraços.

Edição feita por: malukocs, 07/08/2008, 12:30.


#3 fekz

fekz

    12 Horas

  • Usuários
  • 243 posts
  • Sexo:Não informado

Posted 07/08/2008, 12:57

Po cara, valeu, nem tinha percebido.

Agora e se eu quiser fazer isso, inserindo isso numa div por exemplo?

div id="mostra">

document.getElementById('mostra').innerHTML = "Saldo: " +saldo

seria isso?

document.getElementById('escreve').innerHTML="Saldo: " + this.saldo;
<body>
<div id="escreve"></div>

Esse não funcionou

Edição feita por: fekz, 07/08/2008, 13:01.


#4 Nicholas Pufal

Nicholas Pufal

    Impossível: só existe até alguém duvidar e provar o contrário.

  • Usuários
  • 1655 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 07/08/2008, 13:05

Claro que não vai funcionar.

Você está pedindo para o JS executar o código antes dele ter carregado a estrutura em HTML...

Muda de posição que irá funcionar.

<div id="escreve"></div>

<script>
//seus codigos aqui...
</script>

P.S: Use a tag code do fórum para postar códigos.

Exemplo:

[code ]seu codigo[/code ]


Retira os espaços e faz como esse exemplo para poder funcionar (y)
BLOG Touché Criação - Vamos trocar idéias? -> http://blog.touchecriacao.com.br/
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.

#5 fekz

fekz

    12 Horas

  • Usuários
  • 243 posts
  • Sexo:Não informado

Posted 07/08/2008, 13:38

<html>

<head>

</head>





Não adiantou nada, cara.

Qual a diferença de por no head ou não.

Eu sempre ouço que tenho que por tudo no head.



<body>

<div id="escreve"></div>

<script>



function metodo1(){

document.getElementById('escreve').innerHTML = "Saldo: " +saldo

}



function Conta(corr, saldo) {

this.correntista = corr;

this.saldo = saldo;

this.imprimeSaldo = metodo1;

}



cc1 = new Conta("Fernando", 800);

cc1.imprimeSaldo();



</body>

</html>


#6 Nicholas Pufal

Nicholas Pufal

    Impossível: só existe até alguém duvidar e provar o contrário.

  • Usuários
  • 1655 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 07/08/2008, 14:49

Tem diferença no seu caso pois você não está chamando a função através de um evento.

A propósito... Eu testei aqui e funcionou.

P.S: A tag code é apenas para o código. Não poste dentro dela... A sua mensagem você digita fora...
BLOG Touché Criação - Vamos trocar idéias? -> http://blog.touchecriacao.com.br/
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.

#7 fekz

fekz

    12 Horas

  • Usuários
  • 243 posts
  • Sexo:Não informado

Posted 08/08/2008, 16:28

Ok, beleza, entendi.

Mas e se eu quiser criar mais contas?
exemplo:

<html>
<head>
</head>


<body>
<div id="escreve"></div>
<script>
function metodo1() {
document.getElementById('escreve').innerHTML="Nome: " + this.correntista + "<br />Saldo: " + this.saldo;
}

function Conta(corr, saldo) {
this.correntista = corr;
this.saldo = saldo;
this.imprimeSaldo = metodo1;
}

cc1 = new Conta("Fernando", 940);
cc1.imprimeSaldo();

cc2 = new Conta("Joao",2000);
cc2.imprimeSaldo();

</script>
</body>
</html>

Se eu puser esse código, ele só mostra: Nome: João, Saldo: 2000.
Porque não mostra também o cc1?
Preciso fazer um loop?

Firehalk, pode ajudar?

Pode ajudar FireHalk?

#8 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 08/08/2008, 21:18

Isso acontece porque você está usando o innerHTML sempre que chama a função que mostra na página. Tente concatenar o valor existente na div com o novo valor que será adicionado ao chamar a função. Coloque apenas o + antes do =.
....innerHTML+="N...

Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#9 fekz

fekz

    12 Horas

  • Usuários
  • 243 posts
  • Sexo:Não informado

Posted 09/08/2008, 14:15

Deu certo, cara, valeu.

Mas poderia me explicar melhor?

porque pondo o mais = dá certo?

Blz, eu sei que o += pega o valor de antes e soma o valor sem apagar o valor de antes.

Mas como ele faz isso, se não tem um loop.

Ele pega, escreve um nome. E blz, porque não pára por aí?

#10 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 09/08/2008, 20:43

Como você falou, ele 'soma' com o valor já existente, ele concatena.

Não tem um loop, mas veja que você chama a mesma função duas vezes (cc1 e cc2), e isso faz com que um sobrescreva o outro. Por isso tem que fazer essa de concatenar os valores.
Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#11 fekz

fekz

    12 Horas

  • Usuários
  • 243 posts
  • Sexo:Não informado

Posted 09/08/2008, 21:09

Ah beleza.
Valeu cara, muito obrigado, entendi ;D

#12 bimonti

bimonti

    Super Veterano

  • Usuários
  • 2654 posts
  • Sexo:Masculino

Posted 11/08/2008, 10:14

A sua função de exemplo é muito simples, mas se quiser pesquisar pela propriedade "prototype", ela ajuda muito depois de um tempo. Funciona assim, se você adicionar a função "metodo1" ao objeto (através do this.imprimeSaldo=metodo1), a cada objeto criado usando o operador new, vai conter uma cópia da função. Então se você criar 10 objetos, o javascript tem que alocar na memória 10 vezes a funçao metodo1. Usando prototype, a função passa para o chainscope, e fica acessível para qualquer objeto definido futuramente. Exemplo:

<script>
function conta(corr, saldo) {
	this.correntista = corr;
	this.saldo = saldo;
}

conta.prototype.imprimeSaldo = function () {
	document.getElementById("teste").innerHTML += 
	"<br /><br />Nome: " +this.correntista+ "<br />Saldo: " +this.saldo;
}
</script>

Depois você pode usar normalmente:
<div id="teste"><h1>Saldos</h1></div>
<script>
cc1 = new conta("Fernando", 940);
cc1.imprimeSaldo();

cc2 = new conta("Joao",2000);
cc2.imprimeSaldo();
</script>

Entendeu ?!
WebFórum - Equipe de Desenvolvimento - Monitor
Posted Image
Yeah I do have some stories, and it's true I want all the glory ...




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq