Clases en JavaScript: constructor, métodos estáticos y herencia

Clases en JavaScript: constructor, métodos estáticos y herencia
Actualización del 10 de enero de 2023
Si buscas un tutorial de JavaScript que cubra también las clases, quizá te interese mi nuevo tutorial de JavaScript.

Las clases llegaron a JavaScript con ECMAScript 2015. A diferencia de las clases de otros lenguajes orientados a objetos, las clases de JavaScript no son más que un tipo especial de función. Solo que en lugar de la palabra clave «function» se escribe «class». Se añadieron al lenguaje para que la sintaxis se pareciera a la de los demás lenguajes orientados a objetos (Java, Python, C++).

Definir una clase

javascript
class Rectangle {
    constructor(height, width) {
        this.height = height;
        this.width = width;
    }
}

Para declarar una clase se usa la palabra clave class seguida del nombre de la clase (aquí Rectangle).

Constructor: es el método especial que inicializa una instancia de la clase. Es decir, cada vez que creas una instancia nueva se ejecuta el constructor.

Métodos de una clase

javascript
class Rectangle {
    constructor(height, width) {
        this.height = height;
        this.width = width; 
    }
    // Méthode prototype
    area() {
        return console.log(`La zone est ${this.height*this.width}`); 
    }
    // Méthode statique
    static display(rect){
        return console.log(`Height: ${rect.height} Width: ${rect.width}`); 
    }
}

const rectangle = new Rectangle(5, 4);  // Instancier la classe
rectangle.area(); 
// La zone est 20
Rectangle.display(rectangle); 
// Height: 5 Width: 4 
  • Método de prototipo: area() es un método de prototipo.
  • Método estático: display() es un método estático.

Método de prototipo

Un método de prototipo solo está disponible cuando creas una instancia de la clase. Como ves en el ejemplo anterior, se llama (línea 17) escribiendo el nombre del método sobre el objeto, seguido de paréntesis (los parámetros, si los hay, van dentro).

Método estático

Un método estático se puede llamar sin instanciar la clase. Los métodos estáticos se definen sobre la clase misma, no sobre el objeto. Eso significa que no puedes llamar a un método estático sobre el objeto (rectangle), sino sobre la clase (Rectangle), como en la línea 19.

Herencia

javascript
class Car {
    constructor(brand) {
        this.carname = brand; 
    }
    present() {
        return 'c\'est ' + this.carname;  
    }
}

class Model extends Car {
    constructor(brand, model) {
        super(brand); 
        this.model = model; 
    }
    show() {
        return console.log(`${this.present()} ${this.model}`); 
    }
}

const mycar = new Model("Ford", "Mustang"); 
mycar.show(); 
// c'est Ford Mustang

Para crear una herencia de clase, usa la palabra clave extends. Con extends, la clase hija hereda de la clase padre.

Una clase creada con herencia recibe todos los métodos de la otra clase. En el ejemplo anterior, la clase Model hereda todos los métodos de la clase Car.

La llamada super() apunta a la clase padre. Al invocar super() dentro del constructor llamamos al constructor del padre y obtenemos acceso a sus propiedades y a sus métodos.
La herencia sirve para reutilizar código: al crear una clase nueva puedes aprovechar las propiedades y los métodos de una clase que ya existe.

JavaScript

Damien Flandrin Desarrollador web desde 2010, creador de Gekkode y de Email Impact. Cada artículo se prueba en un proyecto real antes de publicarse. Contacto
Newsletter

Las nuevas pruebas, tutoriales y proyectos, por correo.

Pruebas reproducibles, código versionado, resultados fechados. Nunca spam.