Como funcionam protótipos em JavaScript?

Protótipos em JavaScript são uma característica importante da linguagem que permite a herança entre objetos. Em vez de usar classes como em outras linguagens orientadas a objeto, o JavaScript usa um sistema de protótipos.

Em termos simples, um protótipo é um objeto a partir do qual outro objeto herda propriedades e métodos. O objeto que está herdando é chamado de objeto filho e o objeto do qual ele herda é chamado de objeto pai.

A herança por protótipos é alcançada quando o objeto filho recebe uma referência ao objeto pai em sua cadeia de protótipos. Isso significa que, se uma propriedade ou método não estiver presente no objeto filho, ele será procurado no objeto pai, e assim por diante, até alcançar o objeto básico (Object.prototype) no topo da cadeia de protótipos.

Vamos ver um exemplo para entender melhor:

// Definindo um objeto pai
var pessoa = {
  nome: "João",
  idade: 25,
  saudacao: function() {
    console.log("Olá! Meu nome é " + this.nome + " e eu tenho " + this.idade + " anos.");
  }
};

// Criando um objeto filho
var aluno = Object.create(pessoa); // aluno herda de pessoa

// Adicionando propriedades e métodos no objeto filho
aluno.matricula = "123456";
aluno.cursos = ["Matemática", "Física"];

// Alterando propriedades no objeto filho
aluno.nome = "Maria";

// Chame o método herdado do objeto pai
aluno.saudacao(); // Saída: "Olá! Meu nome é Maria e eu tenho 25 anos."

Neste exemplo, criamos um objeto pessoa com propriedades nome, idade e um método saudacao. Em seguida, usamos o método Object.create para criar um novo objeto aluno que herda as propriedades e métodos do objeto pessoa. Podemos adicionar propriedades e métodos específicos ao objeto aluno, que também poderá acessar as propriedades e métodos do objeto pessoa por meio da cadeia de protótipos.

Essa é apenas uma introdução básica ao conceito de protótipos em JavaScript. Eles são uma parte fundamental da linguagem e permitem a implementação de herança de uma maneira flexível e poderosa.