JavaScript es un lenguaje que surgió para el desarrollo web, para poder interaccionar con el usuario y hacer ciertas acciones básicas. En la actualidad JavaScript se ha ampliado ofreciendo nuevas funcionalidades. Se utiliza principalmente en su forma del lado del cliente, aunque existe una versión para el lado del servidor. JavaScript puede tener todo lo que un lenguaje orientado a objetos, tiene que ofrecer.

Para entender como funciona la orientación a objetos en JavaScript, primero hay que empezar definiendo que es la orientación a objetos.

Programación orientada a objetos (POO) es un modelo de lenguaje de programación organizada alrededor de los objetos en lugar de "acciones" y datos en lugar de la lógica. Nos interesa mas saber como vamos a relacionar los objetos y la lógica del programa que los propios datos.

Tenemos que saber algunos términos asociados a la orientación de objetos:

  • Clase: Definimos como va a ser nuestro objeto.
  • Objeto: Una instancia de una clase
  • Métodos y propiedades: Características concretas del objeto y acciones que puede realizar.
  • Constructor: Con este método inicializamos las propiedades con los valores que le pasamos. Este método se ejecuta al crear un objeto.
  • Herencia: Con la herencia podemos hacer que una clase adquiera las características de otra.
  • Polimorfismo: Las clases podrían definir el mismo método o propiedad.
JavaScript Programacion orientada a objetos

Programación orientada a objetos en JavaScript

Crear una clase con JavaScript tiene esta pinta:
function Car() {}

Con esto definimos que nuestros coches tienen una serie de caracteristicas (4 ruedas, 1 motor, 5 asientos).

En JavaScript no necesitamos crear un método específicamente para el constructor sino que podemos usar la función que creamos antes para inicializar las características de nuestra clase.

function Car() {
  this.wheels = 4;
  this.engines = 1;
  this.seats = 1;
}

Para crear una instancia de la clase que acabamos de crear simplemente llamamos a la palabra new que indica a JavaScript que estas creando un objeto nuevo.

var myCar = new Car();

Pero si lo que queremos es que cada instancia tenga diferentes características pero con la misma estructura, tenemos que añadir paramentos a nuestro constructor

function Car(wheels, seats, engines) {
  this.wheels = wheels;
  this.seats = seats;
  this.engines = engines;
}
var myCar = new Car(6, 3, 1);

De esta forma, al crear el objeto nuevo, le pasamos los valores que queramos, siguiendo la estructura definida en el constructor.

Para que una clase herede de otra, tenemos que usar su prototipo. Cada objeto tiene un prototipo. De este prototipo hereda todas las propiedades y métodos, por eso si queremos hacer que una clase herede de otra lo que tenemos que hacer es cambiar el prototipo de la clase hija por el de la clase del padre.

function Dad() {
  this.atributoDad = 4;
}

function Son() {
  this.atributoSon = 5;
}
Son.prototype = new Dad();