O que são protótipos em JavaScript?
sobes.tech IA
Resposta da IA
Em JavaScript, os objetos podem herdar propriedades e métodos de outros objetos através do mecanismo de protótipos. Cada objeto em JavaScript possui uma propriedade interna oculta [[Prototype]], que aponta para outro objeto, seu protótipo. Quando se acede a uma propriedade ou método de um objeto, o motor JavaScript primeiro procura no próprio objeto. Se não encontrar, acede à propriedade [[Prototype]] e procura no protótipo. Este processo repete-se ao longo da cadeia de protótipos até que a propriedade seja encontrada ou até que null seja atingido (fim da cadeia).
Conceitos principais:
- Cadeia de protótipos: Sequência de objetos ligados através da propriedade
[[Prototype]]. - Herança: Os objetos herdam propriedades e métodos dos seus protótipos.
__proto__: Propriedade historicamente usada (embora não padronizada inicialmente) para aceder a[[Prototype]]. Atualmente, é preferível usarObject.getPrototypeOf().prototype: Propriedade do construtor à qual[[Prototype]]faz referência nas instâncias criadas com esse construtor.
Exemplo com construtor e protótipo:
// Construtor
function Person(name, age) {
this.name = name;
this.age = age;
}
// Adicionar método ao protótipo
Person.prototype.sayHello = function() {
console.log("Olá, o meu nome é " + this.name);
};
// Criar uma instância
const person1 = new Person("Alice", 30);
// Chamar método do protótipo
person1.sayHello(); // Saída: Olá, o meu nome é Alice
// Aceder ao protótipo da instância
console.log(Object.getPrototypeOf(person1) === Person.prototype); // Saída: true
Neste exemplo:
Personé uma função construtora.Person.prototypeé o objeto que serve de protótipo para todas as instâncias criadas comnew Person().sayHelloé um método adicionado ao protótipo. Todas as instâncias dePersonherdam este método.- Quando se chama
person1.sayHello(), o motor JavaScript procurasayHelloemperson1. Se não encontrar, consulta o[[Prototype]]deperson1(que é igual aPerson.prototype) e encontra o método lá.
Os protótipos permitem uma utilização eficiente de memória, pois os métodos e propriedades comuns ficam armazenados no protótipo, em vez de serem duplicados em cada instância de objeto.