Clases en JavaScript

Author
Por Darío Rivera
Publicado el en Javascript

En este post verás las diferentes formas de crear clases en JavaScript, desde el método de la vieja escuela hasta las técnicas modernas y recomendadas por la comunidad. Después de leer este post tendrás un conocimiento profundo acerca de cómo funcionan las clases en JavaScript.

JavaScript es un lenguaje de programación basado en prototipos y orientado a objetos. Debido a esto, te recomendamos pasar primero por Introducción a la Programación Orientada a Objetos en el caso de que no tengas ninguna experiencia anteiror con este paradigma.

Constructor de función

Antes de los constructores la forma de crear una clase consistía en crear una función como la siguiente:

let Person = function(firstName, lastName) {
    this.firstName = firstName
    this.lastName = lastName
}

// otra forma de hacerlo es esta
function Person(firstName, lastName) {
    this.firstName = firstName
    this.lastName = lastName
}

De esta forma podría utilizar el operador new y pasar los argumentos en el "constructor".

let person = new Person('Steave', 'Jobs')
person.firstName;   // Steave

Para crear métodos en nuestra clase podríamos en el mismo constructor de función definir funciones de la siguiente manera:

function Person(firstName, lastName) {
    this.firstName = firstName
    this.lastName = lastName
    this.toString = function() {
        return this.firstName + ' ' + this.lastName
    }
}

Ahora bien la forma más eficaz de crear métodos a dicha clase sería utilizar la propiedad prototype así:

Person.prototype = {
    toString: function() {
        return this.firstName + ' ' + this.lastName
    }
}

De cualquier forma podemos utilizar los métodos de manera tan sencilla como

person.toString();    // Steave Jobs

Declaración y expresión de clase

Una de las formas modernas de definir una clase es utilizando la palabra reservada class. A esta forma de definir una clase se le conoce como declaración de clase.

class Person {
    constructor(firstName, lastName) {
        this.firstName = firstName
        this.lastName = lastName
    }
}

Por otro lado, podemos definir también una clase utilizando una expresión. A esta forma alternativa se le conoce como expresión de clase.

let Person = class {
    constructor(firstName, lastName) {
        this.firstName = firstName
        this.lastName = lastName
    }
}

Existe una diferencia sutil entre declarar una clase de la forma moderna y es que las clases declaradas con class no presentan hoisting. Para ver un poco más a fondo este tópico te invitamos a ver nuestro artículo Hoisting en JavaScript.

Métodos

Para crear métodos en las clases solo debemos agregar nuevas funciones después del constructor. Observa también como en el siguiente método utilizamos this para referirnos a la instancia actual de la clase.

class Person {
    constructor(firstName, lastName) {
        this.firstName = firstName
        this.lastName = lastName
    }
    toString() {
        return this.firstName + ' ' + this.lastName
    }
}

Métodos estáticos

Los métodos estáticos son útiles cuando no necesitamos crear una instancia de una clase para implementar una funcionalidad.

class Greeting {
    static sayHelloTo(person) {
        return 'Hello, ' + person.name
    }
}

Greeting.sayHelloTo({ name: 'Andrew' })

Acerca de Darío Rivera

Author

Application Architect at Elentra Corp . Quality developer and passionate learner with 10+ years of experience in web technologies. Creator of EasyHttp , an standard way to consume HTTP Clients.

LinkedIn Twitter Instagram

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.