Protótipo
Em JavaScript, todos os objetos são instâncias de um protótipo. Cada objeto em JavaScript tem um protótipo associado, que é basicamente um objeto de onde ele herda propriedades e métodos. O sistema de protótipos é uma característica fundamental em JavaScript que permite a herança e a extensão de objetos.
Protótipo Padrão e Herança:
Cada objeto em JavaScript possui um protótipo (exceto o objeto de protótipo, que é a raiz de todos os protótipos em JavaScript). Quando você tenta acessar uma propriedade ou um método de um objeto que não está definido no próprio objeto, o JavaScript procura essa propriedade ou método no protótipo desse objeto. Se não encontrar, ele procura no protótipo do protótipo, e assim por diante, subindo na cadeia de protótipos até encontrar ou não encontrar a propriedade ou método desejado.
Usando Protótipos para Adicionar Métodos:
Você pode adicionar métodos a todos os objetos de um determinado tipo usando o seu protótipo. Por exemplo, você pode adicionar um método mostrar
a todos os objetos do tipo Carro
desta forma:
function Carro(marca, modelo) {
this.marca = marca;
this.modelo = modelo;
}
// Adicionando um método ao protótipo do objeto Carro
Carro.prototype.mostrar = function() {
console.log(this.marca + " " + this.modelo);
};
var meuCarro = new Carro("Toyota", "Corolla");
meuCarro.mostrar(); // Saída: "Toyota Corolla"
Neste exemplo, mostrar
é adicionado ao protótipo do objeto Carro
, permitindo que todos os objetos criados a partir do construtor Carro
acessem este método.
Usando Protótipos para Adicionar Propriedades:
Você também pode adicionar propriedades aos objetos usando protótipos. No entanto, geralmente, é preferível adicionar métodos ao protótipo em vez de propriedades, pois as propriedades adicionadas aos protótipos podem levar a comportamentos inesperados devido à natureza compartilhada dos protótipos.
function Pessoa(nome) {
this.nome = nome;
}
// Adicionando uma propriedade ao protótipo do objeto Pessoa
Pessoa.prototype.pais = "Brasil";
var pessoa1 = new Pessoa("Alice");
var pessoa2 = new Pessoa("Bob");
console.log(pessoa1.pais); // Saída: "Brasil"
console.log(pessoa2.pais); // Saída: "Brasil"
Neste exemplo, pais
é adicionado ao protótipo do objeto Pessoa
, então todas as instâncias de Pessoa
compartilharão essa propriedade.
A compreensão do sistema de protótipos é fundamental para entender a herança e a estrutura de objetos em JavaScript. É uma das características mais poderosas e distintivas da linguagem.