← Back to home

Prototype

By Pscodium · 8/4/2026 · 2 views

Prototype

O Prototype é um padrão criacional que permite criar novos objetos a partir da cópia de um objeto existente.

Em vez de criar um objeto completamente do zero:

const user = new User();

podemos clonar um objeto já configurado:

const copy = user.clone();

A ideia é:

Utilizar um objeto existente como modelo para criar novos objetos.


Exemplo simples

Imagine um documento:

class Document {
  constructor(
    public title: string,
    public content: string
  ) {}

  clone() {
    return new Document(
      this.title,
      this.content
    );
  }
}

Podemos criar um documento:

const original =
  new Document(
    "Meu Documento",
    "Conteúdo inicial"
  );

Agora podemos cloná-lo:

const copy =
  original.clone();

Temos:

Original
   │
   │ clone()
   ↓
Cópia

Os objetos são diferentes:

console.log(
  original === copy
);

// false

Mas possuem os mesmos valores:

console.log(
  original.title === copy.title
);

// true

Alterando a cópia

Podemos modificar a cópia:

copy.title =
  "Documento Copiado";

O original permanece:

console.log(
  original.title
);

// Meu Documento

Enquanto a cópia possui:

console.log(
  copy.title
);

// Documento Copiado

Exemplo prático: jogos

O Prototype pode ser útil em jogos.

Imagine um inimigo:

class Enemy {
  constructor(
    public health: number,
    public damage: number,
    public speed: number
  ) {}

  clone() {
    return new Enemy(
      this.health,
      this.damage,
      this.speed
    );
  }
}

Criamos um inimigo base:

const enemyPrototype =
  new Enemy(
    100,
    20,
    5
  );

Agora podemos criar vários inimigos:

const enemy1 =
  enemyPrototype.clone();

const enemy2 =
  enemyPrototype.clone();

const enemy3 =
  enemyPrototype.clone();

Podemos então alterar cada um:

enemy1.health = 200;
enemy2.damage = 50;
enemy3.speed = 10;

Isso evita repetir toda a configuração inicial.


Shallow Copy vs Deep Copy

É importante ter cuidado ao clonar objetos.

Imagine:

class User {
  constructor(
    public name: string,
    public settings: {
      theme: string;
    }
  ) {}

  clone() {
    return {
      ...this
    };
  }
}

O objeto externo foi copiado, mas settings ainda pode ser compartilhado.

Para estruturas complexas, pode ser necessário realizar um Deep Copy.

Por exemplo:

clone() {
  return structuredClone(this);
}

A estratégia depende da estrutura do objeto.


Quando usar?

Prototype é útil quando:

  • Criar o objeto do zero é caro.
  • Os objetos possuem configurações complexas.
  • Temos objetos base que serão reutilizados.
  • Precisamos criar muitas variações de um mesmo objeto.

Exemplos:

Jogos
Documentos
Templates
Objetos gráficos
Configurações
Objetos complexos

Resumo

O fluxo é:

Objeto Prototype
      │
      │ clone()
      ├─────────────┐
      ↓             ↓
   Objeto A      Objeto B

A ideia principal é:

Criar novos objetos clonando objetos existentes em vez de construí-los do zero.



Comments

No comments yet.