¿Cómo crear métodos especiales en una instancia existente?
Al trabajar con instancias específicas de una clase en JavaScript, a veces necesitamos métodos únicos que no fueron definidos en la clase constructora original. Para abordar esta necesidad, es posible agregar nuevos métodos directamente a una instancia. Para llevar a cabo esto, simplemente declaramos el método como una función asociada a la instancia.
perro1.nuevoMetodo=function(){console.log("Este es un nuevo método.");};
Este enfoque añade el método solo a perro1, haciendo que otras instancias no lo tengan. Aunque funcional para escenarios específicos, este método no es elegante ni eficiente si queremos que todas las instancias compartan el mismo comportamiento.
¿Qué es el prototype y cómo se utiliza para agregar métodos?
El prototype en JavaScript es una herramienta fundamental para compartir métodos y propiedades a través de múltiples instancias de una clase constructora. Si buscamos que un método esté disponible para cada instancia de una clase, se debe añadir directamente al prototipo de esa clase.
Perro.prototype.segundoMetodo=function(){console.log("Este es otro nuevo método.");};
Con este enfoque, cualquier instancia de Perro, ya existente o creada en el futuro, podrá acceder a segundoMetodo. Esta técnica es esencial para la economía de memoria y eficiencia, ya que las funciones compartidas se almacenan en un solo lugar en la memoria.
¿Qué es una cadena de prototipos en JavaScript?
La cadena de prototipos es un concepto clave que explica cómo se heredan métodos y propiedades en JavaScript. Cuando se intenta acceder a una propiedad o método de un objeto, JavaScript primero busca en el propio objeto. Si no lo encuentra, sube por la cadena de prototipos hasta encontrarlo o llegar a null.
Perro1 (instancia): No almacena métodos en el prototipo directamente.
Perro (prototipo de clase): Aquí se encuentran los métodos compartidos por todas las instancias de Perro.
Animal (clase base): Es la clase de la que Perro podría extenderse.
Object (objeto global): La raíz de todos los objetos en JavaScript.
Este sistema de próxeda permite una distribución eficaz de métodos, optimizando recursos sin replicar funciones en cada instancia.
¿Cómo visualizar la cadena de prototipos?
Para entender visualmente cómo funciona una cadena de prototipos, podemos inspeccionar el prototipo de una instancia. Utilizamos Object.getPrototypeOf() para seguir la cadena.
let prototipoActual =Object.getPrototypeOf(perro1);while(prototipoActual){console.log(prototipoActual); prototipoActual =Object.getPrototypeOf(prototipoActual);}
Este código recorre la cadena de prototipos, mostrando cómo perro1 está ligado al prototipo de Perro, luego a Animal y finalmente a Object.
Este sistema es esencial para aprovechar al máximo las capacidades de JavaScript, permitiendo herencia y métodos compartidos sin la duplicación innecesaria de datos. Aprender a usar prototipos eficientemente es un paso importante en el camino de todo desarrollador de JavaScript. ¡Sigue practicando y explorando para convertirte en un mejor programador!
Yo tampoco jajajaj, odio que explique con casos hipoteticos, por que solo escucho perro, perro, jajaja nada como que expliquen con ejercicios practicos, algo que de verdad se puede usar en un ambiente laboral.
Jajajajaja Suele pasar.
No entiendo nada jajajaj, odio que expliquen con casos hipoteticos, por que solo escucho perro, perro, jajaja nada como que expliquen con ejercicios practicos, algo que de verdad se puede usar en un ambiente laboral.
no lo tomes literal, trata de entenderlo como características de algo que puedes escribir en un código
Entiendo de que hablas, te recomiendo dar un paso atrás. Toma el curso básico de programación, el último que salio. Después de ese curso, y ahora tomar este de fundamentos muchas cosas y conceptos me hacen sentido.
.
No te quedes únicamente con lo que muestran en las clases, investiga por tu parte. Recuerda que en este curso estamos viendo fundamentos, si quieres profundizar toma el curso de Programacion Orientada a Objetos JavaScript.
En la vida real, considera una empresa que tiene un modelo de clase Empleado. Cada empleado tiene métodos como trabajar y tomarVacaciones.
Si deseas añadir un nuevo método recibirSalario a un empleado específico, puedes hacerlo directamente en la instancia (por ejemplo, empleado1.recibirSalario = function() {...}). Sin embargo, si necesitas que todos los empleados compartan ese método, debes agregarlo al prototipo de Empleado con Empleado.prototype.recibirSalario = function() {...}. Así, todos los empleados, incluidos los que crearás en el futuro, tendrán acceso a este método. Esto ilustra cómo funciona la herencia y los prototipos en la programación orientada a objetos.
Gracias tu comentario aclara un poco mas el tema. 😊
eso sse explico en la clase de prototype. gracias por al explicacion
Estas cuestiones complejas de entender a la primera o hasta abstractas tienen que explicar con gráficos o otros métodos, para que la mente no acostumbrada entienda. Leyendo los comentarios es bastante complicado para algunos compañeros. No sé si los "profesores" de Platzi toman clases de enseñar primeramente antes de dictar a miles de personas que están confiando en la plataforma. Diego de Grada es Genial, pero es un error que veo en muchos cursos de la plataforma. Parece que pusieron a sus amigos a dictar sin formación pedagógica alguna.
La verdad que si, esperemos que puedan cambiar el tipo de explicación de prototipos, porque no se entiende bien.
la verdad que sentí un contraste entre la uni y esta plataforma. Es urgente que pongan a profesores con al menos una pedagogía aceptable o experiencia en dictar clases, y con una noción de que estos recursos estarán para miles y miles de personas que no entiendan programación o JS en todo caso.
Mi recomendación para los que no le están entendiendo todo bien y en mi caso me ha funcionado es complementar lo que se aborda en la clase con materia externo ya sea chatgpt para conceptos o en algún sitio web con fin educativo y por ultimo repetir la clase cuando no te ha quedado del todo claro adicionalmente tomarse el tiempo para comprender y aprender estos conceptos ya que en la mayoría son abstractos.
finalmente les recomiendo tener paciencia tómense el tiempo que necesiten.
y entones cual es el chiste , no sirve entonces estar pagando por algo que solo te dan un guion y lo demas ir a buscarlo
Bien asertado tu comentario amigo, estos son temas complejos, que poco a poco nos iremos adaptando, tambien debemos ser proactivos, sino todo el tiempo necesitaremos que alguien nos lleve de la manito, NO! hay que ser mas independientes, las cosas buenas no se logran de la noche a la mañana, saludos y buenas vibras a todos :D
Si no entendiste, cosa que si esta a mi parecer bien explicada en el video, es que un prototype se encuentra solo en una: class o en una función constructora.
Cuando quieras modificar una class o una fn constructora tienes que hacerlo mediante su ".prototype" directamente a ellas, no a una instancia.
El prototype viaja de arriba hacia abajo, como una cascada de agua, lo que haya arriba moja al de abajo, a menos que le pongas paraguas pero eso ya es para otro tema(si es que existe), saludos!
Mis notas de JS:
Tus notas están de lujo. Felicidades bro.
Muy chevere ese recurso de repaso activo, gracias por compartir.
Una buena forma de hacer estas cosas sin marearse tanto es ver las cosas como un árbol en donde se hereda todo, y cuando hacemos un prototypo se hace en la base y eso va para los hijos.
entendemos tu sugerencia Facundo, pero creo que ese es un trabajo que debería hacerlo aquí o en otro video el profesor de este curso. Recuerda que estamos pagando por dichos cursos.
Por primera vez durante dos años que empece a aprender JS al fin he entendido las clases, herencias y prototipos JAJAJA grande el profe
Estás en el camino correcto. Los prototipos se asocian a clases y no a instancias. Al crear una clase, se genera un prototipo que contiene métodos y propiedades que las instancias heredan. La cadena de prototipos permite que las instancias busquen métodos en sus clases padres. Asegúrate de entender cómo se inyectan métodos en el prototipo de la clase, no en la instancia.
para los que no entendieron este resumen con ayuda de IA le puede ayudar
Buen resumen.
A mí no me costó trabajo entender. Quizá es porque ya tengo al menos un curso anterior, pero sí entiendo sin problema las cadenas de prototipos.
¿Qué son los prototipos en JavaScript?
Los prototipos en JavaScript son como una receta que le dice a los objetos cómo deben comportarse y qué propiedades o métodos pueden usar.
JavaScript es un lenguaje basado en prototipos, lo que significa que los objetos pueden heredar propiedades y métodos de otros objetos. En lugar de usar clases (como en otros lenguajes), cada objeto tiene un prototipo del cual puede obtener características.
🔹 ¿Cómo funciona?
Cuando creas un objeto en JavaScript y le pides una propiedad o método, el motor de JavaScript busca primero dentro del objeto. Si no lo encuentra, revisa en su prototipo (y sigue subiendo en la cadena de prototipos hasta encontrarlo o hasta llegar a null).
🔹 Ejemplo práctico en un ambiente laboral
Imagina que trabajas en una empresa y necesitas hacer un sistema de empleados. Cada empleado tiene un nombre y un cargo. Además, todos los empleados pueden saludar, pero cada empleado puede tener diferentes datos.
En lugar de repetir la función saludar para cada empleado, usamos prototipos para definir el método una sola vez y que todos los empleados lo hereden.
✅ Código con prototipos
// 1. Creamos una función constructora para los empleadosfunctionEmpleado(nombre, cargo){this.nombre= nombre;this.cargo= cargo;}// 2. Agregamos un método al prototipo de EmpleadoEmpleado.prototype.saludar=function(){console.log(`Hola, soy ${this.nombre} y trabajo como ${this.cargo}.`);}// 3. Creamos empleados usando la función constructoraconst empleado1 =newEmpleado("Ana","Desarrolladora Frontend");const empleado2 =newEmpleado("Carlos","Diseñador UX/UI");// 4. Llamamos al método saludar (se hereda del prototipo)empleado1.saludar();// Salida: Hola, soy Ana y trabajo como Desarrolladora Frontend.empleado2.saludar();// Salida: Hola, soy Carlos y trabajo como Diseñador UX/UI.```🔹 **¿Por qué es útil esto en el trabajo?**
* Evita repetir código innecesario.
* Permite ahorrar memoria porque los métodos no se duplican en cada objeto.
* Hace el código más limpio y fácil de mantener.
Este enfoque es muy común en proyectos grandes, especialmente en JavaScript antiguo antes de que existieran las clases (`class`).Sin embargo, sigue siendo importante entender los prototipos porque **las clases en JavaScript también funcionan internamente con prototipos**.
No entiendo la ventaja o la utilidad de añadir un método desde el prototipo y no añadirlo en la clase constructora, la verdad es que la explicación de este tema es un lio, se está liando logaritmicamente a medida que lo está explicando
Justamente el prototipo es como el molde de la clase constructora, si lo agregas a la instancia el método estará duplicado en memoria en cada instancia.
en los comentarios veo que la generación de cristal se queja mucho, no leo lloros XD
¿Cuál es la diferencia entre el uso de prototype y la herencia?
Prototype es el mecanismo subyacente para compartir métodos y propiedades entre instancias en JavaScript.
Herencia es una forma de aprovechar el prototipo para crear jerarquías de clases y extender funcionalidades de manera estructurada.
A como yo lo entiendo, en JavaScript la herencia se da a través de la cadena de prototipos.
Me costo mucho entender esta clase. inclusive usando la opcion preguntar. mi sugerencia es buscar otro ejemplo y hacer un paso a paso con salida desde la consola y no el navegador para poder seguir la herencia en la clases, metodo e instancia.
Pase como 20 minutos tratando de entender porque le estaba poniendo un prototipo y no un metodo directo al objeto creado de una instancia y no a una clase constructora ya que había pausado el video jajaa la importancia de ver completo el video.
Pero el hecho de saber que estaba mal esto me hace pensar que estoy entendiendo los conceptos.
El error es que se pudo confundir la instancia de perro1 con la clase constructora Perro que hereda de la clase Animal.
Ambas clases (Perro y Animal) se les pueden agregar prototipos que puede ser compartidos en en la cadena de los mismos de arriba hacia abajo y NO al revés es decir de Animales hacia Perro porque Animales no puede leer los prototipos añadidos a Perro, pero Perro si puede leer los Prototipos de Animales porque los hereda, pero solo si estos son añadidos antes de su llamado o ejecución ya que no podríamos llamar a un metodo añadido al prototipo de la clase Animales antes de que este se añada.
estudien vagos XD Herencia y la cadena de prototipos - JavaScript | MDN
Esta clase si la entendí muy poco y eso que la repeti 3 veces. Deberian crear un ejemplo más practico y no solo hipotetico.
Es la primera vez que entiendo algo tan facil esto de clases, prototipos, herencias.
Los Prototypes solo se Crea con las Clases || FuncionesConstructoras ;
Las Instancias Nunca tienen un Prototypo ;
La forma correcta de agregar un Metodo nuevo a las instancias es Agregar el Metodo al prototype de una clases || funcion_constructora .