Quantcast
Channel: Tópicos
Viewing all articles
Browse latest Browse all 14700

Criação de objetos (factory) javascript

$
0
0
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
Código :
function Pessoa(id, nome) {
  this.id = id;
  this.nome = nome;
}

Classe Aluno extends Pessoa
Código :
function Aluno(id, nome) {
  Pessoa.call(this, id, nome);
}

Classe Professor extends Pessoa
Código :
function Professor(id, nome) {
  Pessoa.call(this, id, nome);
}

utilizando a função de factory para criar aluno e professor
Código :
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]
Código :
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
Código :
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

Viewing all articles
Browse latest Browse all 14700