Prototipos en JavaScript: Tipos, Usos y Características

Prototipos en JavaScript: Tipos, Usos y Características

Introducción

Objetos JS: Prototipos, herencia y Object.create | by María Vedia | Medium

En JavaScript, los prototipos son uno de los pilares fundamentales del lenguaje. Aunque JavaScript no sigue el paradigma de la programación orientada a objetos de manera clásica, como en lenguajes como Java o C++, utiliza un modelo basado en prototipos que permite la reutilización de propiedades y métodos a través de herencia. Este post te ayudará a entender qué son los prototipos, los tipos de prototipos que existen en JavaScript, y cómo puedes utilizarlos en tus proyectos para escribir código eficiente y organizado.

¿Qué es un Prototipo en JavaScript?

Un prototipo en JavaScript es un objeto del cual otros objetos heredan propiedades y métodos. Cada objeto en JavaScript tiene una referencia interna a otro objeto llamado su prototipo. Cuando intentas acceder a una propiedad o método en un objeto y no se encuentra, JavaScript busca dicha propiedad en el prototipo del objeto.

Ejemplo Básico

				
					function Persona(nombre) {
    this.nombre = nombre;
}

Persona.prototype.saludar = function() {
    console.log("Hola, mi nombre es " + this.nombre);
};

let juan = new Persona("Juan");
juan.saludar(); // "Hola, mi nombre es Juan"

				
			

En este ejemplo, el método saludar no está definido en el objeto juan, pero JavaScript lo encuentra en el prototipo de Persona.

Tipos de Prototipos en JavaScript

  1. Prototype de un Objeto
    Cada función en JavaScript, cuando se define, automáticamente tiene una propiedad llamada prototype. Este prototipo es donde puedes agregar propiedades y métodos que estarán disponibles para todas las instancias creadas con esa función constructora.

    Ejemplo

				
					function Coche(marca) {
    this.marca = marca;
}

Coche.prototype.arrancar = function() {
    console.log(this.marca + " está arrancando.");
};

let miCoche = new Coche("Toyota");
miCoche.arrancar(); // "Toyota está arrancando."
				
			

Uso: Este tipo de prototipo es útil para definir métodos que pueden ser compartidos por todas las instancias de un objeto sin tener que recrearlos cada vez.

Prototype Chain (Cadena de Prototipos)

La cadena de prototipos se refiere a cómo JavaScript sigue buscando propiedades y métodos a través de una cadena de prototipos. Si un objeto no tiene una propiedad o método, busca en su prototipo y luego en el prototipo de su prototipo, hasta llegar al prototipo raíz (Object.prototype).

Ejemplo
				
					let animal = {
    comer: function() {
        console.log("El animal está comiendo.");
    }
};

let perro = Object.create(animal);
perro.ladrar = function() {
    console.log("El perro está ladrando.");
};

perro.comer(); // "El animal está comiendo." (heredado del prototipo)
				
			

Uso: La cadena de prototipos es fundamental para la herencia en JavaScript, permitiendo que los objetos compartan propiedades y métodos sin duplicar código.

Prototipos Nativos (Native Prototypes)

En JavaScript, los objetos predefinidos como Array, String, Object, etc., también tienen prototipos que contienen métodos útiles. Estos prototipos pueden ser extendidos (aunque se debe tener cuidado al hacerlo).

Ejemplo
				
					let numeros = [1, 2, 3];
console.log(numeros.map(x => x * 2)); // [2, 4, 6] (método en Array.prototype)
				
			

Uso: Los prototipos nativos proporcionan métodos que facilitan el trabajo con estructuras de datos comunes como arrays, cadenas de texto, y objetos.

Características Clave de los Prototipos

  • Herencia Prototípica: En lugar de crear una copia de un objeto padre, JavaScript permite que los objetos hijos hereden directamente del prototipo del objeto padre.
  • Eficiencia de Memoria: Al utilizar el prototipo, todos los objetos de una misma clase comparten métodos y propiedades, en lugar de duplicarlos en cada instancia.
  • Modificación Dinámica: Puedes agregar o modificar propiedades y métodos a los prototipos incluso después de que el objeto ha sido instanciado.

Mejores Prácticas y Consejos

  1. Evita Sobrecargar Prototipos Nativos
    Aunque es técnicamente posible modificar prototipos nativos, como Array.prototype o String.prototype, hacerlo puede causar problemas de compatibilidad y errores en tu código o el de otros desarrolladores. Es mejor evitar modificar estos prototipos, salvo que tengas una razón muy justificada.

  2. Aprovecha la Herencia Prototípica
    Usa la herencia prototípica para evitar duplicar código y mantener tu aplicación más ligera. Coloca los métodos y propiedades comunes en los prototipos en lugar de en las instancias de los objetos.

  3. Usa Object.create() para Crear Objetos con Herencia
    En lugar de usar una función constructora tradicional, Object.create() te permite crear objetos con una herencia explícita del prototipo deseado, sin necesidad de usar new.

    Ejemplo

				
					let persona = {
    saludar: function() {
        console.log("Hola");
    }
};

let empleado = Object.create(persona);
empleado.trabajar = function() {
    console.log("Estoy trabajando.");
};

empleado.saludar(); // "Hola"
				
			

Comprueba las Propiedades con hasOwnProperty()

Si necesitas saber si una propiedad pertenece directamente a un objeto (y no a su prototipo), usa hasOwnProperty().

Ejemplo:

				
					console.log(empleado.hasOwnProperty('saludar')); // false (viene del prototipo)
console.log(empleado.hasOwnProperty('trabajar')); // true
				
			

Conclusión

Los prototipos en JavaScript son una herramienta poderosa que te permiten implementar la herencia de una manera eficiente y flexible. Ya sea que estés creando funciones constructoras, utilizando la cadena de prototipos o aprovechando prototipos nativos, comprender cómo funciona este mecanismo es clave para escribir un código JavaScript más eficiente y reutilizable. Si aplicas las mejores prácticas discutidas en este post, podrás aprovechar al máximo los prototipos en tus proyectos de desarrollo.

¡Déjanos saber en los comentarios cómo usas los prototipos en tus aplicaciones o si tienes alguna pregunta sobre este tema!

Links de referencia: Prototipos de objetosObjetos JS: Prototipos, herencia y Object.create

Facebook
Twitter
LinkedIn

Post relacionados

Post recientes

Search