Uso de prototipos en Javascript

Cómo reusar código en Javascript con prototipado

Paradigma prototípico

El prototipado es una característica de JavaScript que permite reutilizar código a través de la creación de objetos a partir de otros objetos. Esto se logra asignando un objeto como prototipo de otro objeto. En contraste con la reutilización de código del paradigma de orientación a objetos donde el código y los atributos a reutilizar están en una clase. Y los objetos se crean a partir de la clase.

Para utilizar el prototipado en JavaScript, se puede seguir los siguientes pasos:

Crear un objeto prototipo: este objeto contiene las propiedades y métodos que se desean reutilizar.

1
2
3
4
5
6
var objetoPrototipo = {
  propiedad1: valor1,
  metodo1: function() {
    // código del método
  }
};

Crear un objeto nuevo a partir del objeto prototipo: este objeto hereda las propiedades y métodos del objeto prototipo.

1
var nuevoObjeto = Object.create(objetoPrototipo);

Modificar el objeto nuevo según sea necesario: se pueden agregar nuevas propiedades y métodos al objeto nuevo sin afectar el objeto prototipo.

1
2
3
4
nuevoObjeto.propiedad2 = valor2;
nuevoObjeto.metodo2 = function() {
  // código del método
};

De esta manera, se puede reutilizar código de un objeto a otro sin tener que copiar y pegar. Además, si se realiza un cambio en el objeto prototipo, se verá reflejado en todos los objetos que lo hayan heredado.

Un ejemplo más realista

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
const person = {
  name: "",
  birthdate: Date(),
  age: function () {
    const millisecondsPerYear = 365.25 * 24 * 60 * 60 * 1000;
    return (Date.now() - this.birthdate) / millisecondsPerYear;
  }
};

const p = Object.create(person);
p.name = 'Leandro';
p.birthdate = Date.parse('01 Jan 1970 00:00:00 GMT')

console.log(p.age());

OOP en Javascript

En Javascript la orientación a objetos está implementada como una capa ficticia de sintaxis que permite describir clases y objetos. Pero el lenguaje internamente crea prototipos y objetos a partir de estos. En el lenguaje no existen realmente las clases.