¿Qué son los prototipos en JavaScript?
sobes.tech AI
Respuesta de la IA
En JavaScript, los objetos pueden heredar propiedades y métodos de otros objetos a través del mecanismo de prototipos. Cada objeto en JavaScript tiene una propiedad interna oculta [[Prototype]], que apunta a otro objeto que es su prototipo. Cuando se accede a una propiedad o método de un objeto, el motor de JavaScript primero lo busca en el propio objeto. Si no lo encuentra, accede a la propiedad [[Prototype]] y busca en el prototipo. Este proceso se repite a lo largo de la cadena de prototipos hasta que la propiedad se encuentre o hasta que se alcance null (el final de la cadena).
Conceptos principales:
- Cadena de prototipos: Secuencia de objetos vinculados a través de la propiedad
[[Prototype]]. - Herencia: Los objetos heredan propiedades y métodos de sus prototipos.
__proto__: Propiedad utilizada históricamente (aunque no estandarizada inicialmente) para acceder a[[Prototype]]. Actualmente, se prefiere usarObject.getPrototypeOf().prototype: Propiedad del constructor a la que[[Prototype]]hace referencia en los instancias creadas con ese constructor.
Ejemplo con constructor y prototipo:
// Constructor
function Person(name, age) {
this.name = name;
this.age = age;
}
// Añadir método al prototipo
Person.prototype.sayHello = function() {
console.log("Hola, mi nombre es " + this.name);
};
// Crear una instancia
const person1 = new Person("Alice", 30);
// Llamar al método del prototipo
person1.sayHello(); // Salida: Hola, mi nombre es Alice
// Acceder al prototipo de la instancia
console.log(Object.getPrototypeOf(person1) === Person.prototype); // Salida: true
En este ejemplo:
Persones una función constructora.Person.prototypees el objeto que actúa como prototipo para todas las instancias creadas connew Person().sayHelloes un método añadido al prototipo. Todas las instancias dePersonheredan este método.- Cuando se llama
person1.sayHello(), el motor de JavaScript buscasayHelloenperson1. Si no lo encuentra, accede a[[Prototype]]deperson1(que es igual aPerson.prototype) y encuentra el método allí.
Los prototipos permiten un uso eficiente de la memoria, ya que los métodos y propiedades comunes se almacenan en el prototipo, en lugar de duplicarse en cada instancia del objeto.