Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

mirador_22

Criação de objetos (factory) javascript

Mensagens Recomendadas

mirador_22    0
mirador_22

Olá, Estou tendo a tentar criar dois objetos do tipo pessoa usando Factory e na primeira tentativa eu criar o primeiro elemento e a segunda tentativa em vez de criar o segundo elemento cria um novo elemento, mas com as mesmas características que o primeiro elemento

Classe Pessoa, que será uma super classe

function Pessoa(id, nome) {
 this.id = id;
 this.nome = nome;
}

Classe Aluno extends Pessoa

function Aluno(id, nome) {
 Pessoa.call(this, id, nome);
}

Classe Professor extends Pessoa

function Professor(id, nome) {
 Pessoa.call(this, id, nome);
}

utilizando a função de factory para criar aluno e professor

function Factory() {
var idAluno = 0;
var idProfessor = 0;

 this.criarPessoa = function(tipo, nome) {
var pessoa = new Pessoa();
switch (tipo) {
  case "1":
	pessoa = new Aluno(idAluno++, nome);
	break;
  case "2":
	pessoa = new Professor(idProfessor++, nome);
	break;
}
return pessoa;
 }
}

Classe Escola com uma lista de pessoas[alunos e professores]

function Escola(id) {
 this.pessoas = [];
 this.factory = new Factory();
 this.pessoaCriada = null;

 this.criarProfessorOuAluno = function(tipo,nome) {

if (tipo!== null) {
  this.pessoaCriada = this.factory.criarPessoa(tipo,nome);

  this.pessoas.push(this.pessoaCriada);

  console.log("\nID: "+this.pessoas[this.pessoaCriada.id].id+
  "\nNome: "+this.pessoas[this.pessoaCriada.id].nome);
} else {
  console.log("não pode ser vazio");
}
 }
}

teste no cmd, node app.js

var escola = new Escola(1);
escola.criarProfessorOuAluno("1","Jonh"); //
escola.criarProfessorOuAluno("1","Bob"); //
escola.criarProfessorOuAluno("1","Jerry"); //
escola.criarProfessorOuAluno("2","Tom"); //
escola.criarProfessorOuAluno("2","Peter"); //

e obtive esse resultado

--------------------------------------

C:\MKO>node app.js

ID: 0

Nome: Jonh

ID: 1

Nome: Bob

ID: 2

Nome: Jerry

ID: 0

Nome: Jonh

ID: 1

Nome: Bob

C:\MKO>

------------------------------------

e não aparece os nomes dos professores Tom e Peter, ou se for apenas para um tipo de pessoa funciona tudo bem e se quiser criar outro tipo de pessoa, retorna o valor das pessoas que já se encontram criadas

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo    1151
HappyHippyHippo

olha bem para esta parte do código:

console.log("\nID: "+this.pessoas[this.pessoaCriada.id].id+"\nNome: "+this.pessoas[this.pessoaCriada.id].nome);
//                                         A
//                                         |
//                             qual é este valor nas 5 iterações das pessoas ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.