Clases en JavaScript con ECMAScript 6

Una de las novedades más esperadas en JavaScript es sin duda la posibilidad de crear clases. A lo largo del tiempo se han simulado de diferentes maneras, pero ahora, con ECMAScript 6, podemos decir que ya tenemos clases en JavaScript.

Para crearlas podemos hacerlo de la misma manera que lo haríamos en cualquier lenguaje orientado a objetos:

class Computer {
    constructor(name, ram, disk) {
        this.name = name;
        this.ram = ram;
        this.disk = disk;
    }

    TechSpecs() {
        console.log(`
        Name: ${this.name} 
        Memory: ${this.ram}GB of RAM 
        Storage: ${this.disk}GB`);
    }
}

var surfacePro6 = new Computer("Surface Pro 6", 16, 512);
surfacePro6.TechSpecs();

Además, también tenemos el concepto de herencia. Siguiendo el mismo ejemplo, vamos a crear una clase que herede de Computer llamada SmartPhone, ya que son los nuevos ordenadores 🙂

class SmartPhone extends Computer {
    constructor(name, ram, disk, camera) {
        super(name, ram, disk);
        this.camera = camera;
    }

    TechSpecs() {
        super.TechSpecs();
        console.log(`        Camera: ${this.camera}
        `);
    }
}

var iPhoneX = new SmartPhone("iPhone X", 3, 256, "12MP wide-angle and telephoto cameras");
iPhoneX.TechSpecs();

El resultado será el siguiente:

Resultado de las clases Computer y SmartPhone

Por último, también podemos hacer uso de getters and setters como haríamos en otros lenguajes.

class Computer {
    constructor(name, ram, disk) {
        this.name = name;
        this.ram = ram;
        this.disk = disk;
    }

    TechSpecs() {
        console.log(`
        Name: ${this.name} 
        Memory: ${this.ram}GB of RAM 
        Storage: ${this.disk}GB`);
    }

    set Name(name) {
        this.name = name;
    }

    get StorageInTB() {
        return this.disk / 1024;
    }
}

var surfacePro6 = new Computer("Surface", 16, 512);
surfacePro6.Name = "Surface Pro 6";
surfacePro6.TechSpecs();
console.log(surfacePro6.StorageInTB);

¡Saludos!