Dymon Zamora
yo con José:
En JavaScript, entender herencia y prototipos es clave para dominar la programación orientada a objetos. Cada clase o función constructora genera un prototipo que comparte propiedades y métodos con sus instancias, lo que te permite escribir código más limpio, reutilizable y organizado.
¿Qué son los prototipos en JavaScript y por qué importan?
JavaScript no funciona como otros lenguajes orientados a objetos tradicionales. Aquí, todo se mueve alrededor de objetos y prototipos. Cuando defines una clase o una función constructora, JavaScript automáticamente crea un prototype asociado a ella.
Ese prototipo es el lugar donde viven las propiedades y los métodos que se van a compartir entre todas las instancias que crees después. Piensa en el prototipo como un repositorio común al que todas las instancias pueden acceder sin necesidad de duplicar código.
¿Qué es un prototipo en JavaScript? Es un objeto que se genera automáticamente cuando defines una clase o función constructora, y contiene los métodos y propiedades que las instancias heredan.
¿Cómo funciona una clase constructora como molde?
Una clase constructora actúa como un molde. Defines una sola vez la estructura, y luego la usas para crear múltiples objetos con la misma forma pero datos distintos.
Imagina que armas una clase llamada Persona. Dentro del molde defines propiedades como nombre, edad, altura y nacionalidad, además de métodos como saludar. Cada vez que necesitas representar a alguien nuevo, creas una instancia a partir de ese molde.
Por ejemplo, si creas una instancia llamada José, le pasas estos datos:
Y aquí viene lo interesante: José no necesita tener su propia copia del método saludar. Ese método ya vive en el prototipo de la clase Persona, así que José simplemente lo hereda.
¿Qué es una instancia y cómo se relaciona con la clase padre?
Una instancia es un objeto concreto creado a partir de una clase. Mientras la clase es el molde abstracto, la instancia es el resultado real con datos específicos.
La clase principal, también llamada clase padre, contiene la lógica compartida. Las instancias que creas a partir de ella reciben automáticamente acceso a esa lógica gracias al prototipo. Por eso, cuando José ejecuta el método saludar, la respuesta puede ser: "Hola, mi nombre es José, ¿cómo te llamas tú?".
¿Para qué sirve la herencia en programación orientada a objetos? Sirve para que las instancias accedan a métodos y propiedades definidos en la clase padre sin tener que reescribirlos, lo que evita duplicación y facilita el mantenimiento.
¿Cómo se hereda un método desde la clase padre?
La herencia en JavaScript ocurre de forma automática gracias al prototipo. Cuando defines un método en la clase constructora, ese método queda disponible para cualquier instancia que crees después.
El flujo se ve así:
Persona con propiedades y el método saludar.saludar desde José, aunque nunca lo definiste dentro de esa instancia.No necesitas declarar el método dentro de cada instancia. Una vez que está en la clase padre, todas las instancias lo tienen disponible. Esa es la magia de la herencia prototípica.
¿Qué ventajas te da trabajar con clases y prototipos?
Usar clases y prototipos te da varios beneficios concretos al programar:
Entender esta relación entre clase, prototipo e instancia te abre la puerta a escribir JavaScript más profesional y a aprovechar al máximo la programación orientada a objetos. ¿Ya intentaste crear tu propia clase constructora? Cuéntame en los comentarios qué molde se te ocurre construir primero.
Dymon Zamora
yo con José:
Petter Joseph Chuquipiondo Robles
Pequeño resumen:
Un prototipo tiene todas las propiedades y métodos que se crearon con una clase o función constructora, que luego se van a compartir o heredar en las instancias que se crearán para dicha clase.
Yimi Alejandro Gaviria Escobar
Prototipo
Es un mecanismo por el cual los objetos en JavaScript pueden heredar propiedades y métodos de otros objetos. Cada objeto en JavaScript tiene una propiedad interna llamada [[Prototype]], que apunta a otro objeto, conocido como su prototipo. Cuando accedes a una propiedad o método en un objeto, JavaScript busca primero en el propio objeto. Si no la encuentra, busca en su prototipo, y así sucesivamente hasta llegar al final de la cadena de prototipos.
Herencia
En JavaScript se refiere al proceso mediante el cual un objeto puede adquirir las propiedades y métodos de otro objeto.
Andrés Soret Chacin
Programación orientada a objetos en JavaScript
Clases y funciones constructoras
Prototipos en JavaScript
Ejemplo de clase y herencia
class Persona { constructor(nombre, edad, altura, nacionalidad) { this.nombre = nombre; this.edad = edad; this.altura = altura; this.nacionalidad = nacionalidad; }
saludar() {
console.log(Hola, mi nombre es ${this.nombre}, ¿cómo te llamas tú?);
}
}
Persona con un constructor y un método saludar.nombre, edad, altura, y nacionalidad.Crear instancias de una clase
new.const jose = new Persona('José', 30, 1.70, 'Colombiano'); jose.saludar();
Persona llamada jose.nombre, edad, altura, y nacionalidad.saludar se llama en la instancia jose, imprimiendo el mensaje correspondiente.Beneficios de la herencia y los prototipos
Próximos pasos
Miguel Jonathan Madrigal González
Les recomiendo el siguiente video, es muy bueno para profundizar en el concepto del objeto prototype.
.
.
Voy a dejar unos datos interesantes que se hablan en el video:
.
Object.getPrototypeOf(tipoDeDato)Object.getPrototypeOf(estanciaObjetivo, estanciaQueHereda)estancia.__proto__ = estancia2.prototype. Esto no es recomendado, puede generar conflictos y lacks de rendimiento.Juliana Rios
Juan Miguel Jimenez
Graficamente sería algo así:
personal
├─ nombre: "Jose"
└─ [[Prototype]] --> Persona.prototype
└─ saludar()
└─ [[Prototype]] --> Object.prototype
Fernando Emilio Díaz López
En sintesis, al crear una instancia de una clase, esa instancia hereda las propiedades definidas en el constructor, las cuales se rellenan con valores únicos para cada objeto, y a su vez accede a los métodos definidos en el prototipo de la clase. Gracias a la cadena de prototipos, estos métodos no se duplican por instancia, pero se pueden invocar directamente (por ejemplo, instancia.metodo()) para ejecutar su comportamiento.
Daniel Vergel
Fernando Emilio Díaz López
El prototipo en JavaScript es un mecanismo que permite la herencia de propiedades y métodos entre objetos. Cada objeto puede tener un prototipo, que actúa como una plantilla o molde; si un objeto no encuentra una propiedad o método en sí mismo, busca en su prototipo. Esto permite compartir características y comportamientos sin duplicar código, facilitando la creación de instancias y la organización del código en la programación orientada a objetos.
Fernando Emilio Díaz López
Al crear instancias tenemos, propiedades únicas por objeto (valores distintos en this) y métodos compartidos en el prototipo (ahorrando memoria y garantizando consistencia).
Fernando Emilio Díaz López
Al crear instancias en JavaScript, cada objeto puede tener propiedades únicas definidas en su contexto (usando this), permitiendo que cada instancia mantenga sus propios valores. Los métodos compartidos en el prototipo permiten que todas las instancias de esa clase accedan a la misma funcionalidad sin necesidad de recrear el método en cada instancia, lo que optimiza el uso de memoria y asegura que todas las instancias tengan acceso a las mismas operaciones. Esto es fundamental en la programación orientada a objetos, promoviendo la reutilización de código y la consistencia en el comportamiento de los objetos.
Fernando Emilio Díaz López
Sí, en JavaScript, el prototipo actúa como una plantilla. Contiene propiedades y métodos que pueden ser heredados por las instancias creadas a partir de una clase. Al definir una clase, el prototipo se utiliza para compartir funcionalidades entre las instancias, lo que permite una eficiente reutilización del código. Así, cada instancia no necesita definir sus propios métodos, sino que puede acceder a ellos a través del prototipo.
Fernando Emilio Díaz López
Sí, las instancias heredan todas las propiedades y métodos de la clase constructora a través del prototipo. Al crear una instancia, como en el ejemplo de "José", puedes acceder a las propiedades que rellenaste y a los métodos definidos en la clase, como "saludar". Esto permite que cada instancia utilice la funcionalidad de la clase sin necesidad de definirla nuevamente.
Eduardo Enrique Morales Martínez
Es como una herencia de todo de la clase constructora?
David Elias Gatica Morales
Eso entendi y ademas se crea un clon llamado prototipo y al hacer una instancia este se extiende de la clase padre
Miguel Fernando Chanduvi Varas
En JavaScript, casi todo es un objeto, y todos los objetos (excepto null) tienen una referencia interna llamada [[Prototype]], que apunta a otro objeto llamado prototype. Actua como un enlace. Este prototype contiene métodos y propiedades compartidas por otros objetos.
Cuando tú usas una función constructora o una clase, se crea un **nuevo objeto prototype** (como un "molde") que contiene los métodos y properties definidos ahí.Entonces, todas las instancias creadas con esa clase heredan esos métodos desde ese prototype.
Cuando accedes a una propiedad o método en un objeto, JavaScript primero lo busca en el objeto directamente. Si no lo encuentra, sigue el enlace al **prototype**. Si el prototype tampoco lo tiene, sigue subiendo por la cadena (prototype chain)hasta llegar al final.
Solo las **funciones constructoras** tienen una propiedad explícita llamada .prototype. Los objetos creados con ellas usan ese .prototype como su [[Prototype]].
Alejandro Esaú Maximino Olmedo
Las instancias son objetos creados a partir de una clase en programación orientada a objetos. En JavaScript, cuando defines una clase y la usas para crear un objeto, ese objeto se considera una instancia de la clase. Cada instancia puede tener diferentes valores para las propiedades definidas en la clase, pero comparte los métodos y comportamientos definidos en ella a través del prototipo. Esto permite organizar y reutilizar código de manera eficiente.
Matias Ezequiel Rivero
Referido a la clase anterior y actual. Entonces suponiendo que tengo una clase Products y varias instancias. Es posible desde un método de la clase por ej. updatePrice() actualizar los precios un cierto porcentaje?
Esto sería una caso correcto de uso en la vida real ??
Muchas gracias.