Classes em JavaScript: construtor, métodos e herança

Classes em JavaScript: construtor, métodos e herança
Atualizado a 10 de janeiro de 2023
Se procuras um tutorial de JavaScript que cubra também as classes, talvez te interesse o meu novo tutorial de JavaScript.

As classes chegaram ao JavaScript com o ECMA2015. Ao contrário das classes de uma linguagem verdadeiramente orientada a objetos, as classes JavaScript são apenas um tipo especial de função. Em vez da palavra-chave «function», escreve-se «class». Foram introduzidas no JavaScript para que a sintaxe se parecesse com a das outras linguagens orientadas a objetos (Java, Python, C++).

Definir uma classe

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

Para declarares uma classe, usa a palavra-chave class seguida do nome da classe (Rectangle, neste caso).

Constructor: é um método especial que inicializa uma instância da classe. Sempre que criamos uma nova instância, o construtor é invocado.

Métodos numa classe

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 protótipo: area() é um método de protótipo.
  • Método estático: display() é um método estático.

Método de protótipo

Um método de protótipo só é acessível depois de criares uma instância da classe. Como vês no exemplo acima, o método de protótipo é chamado (linha 17) sobre o objeto, pelo seu nome seguido de parênteses (os eventuais parâmetros iriam dentro desses parênteses).

Método estático

Um método estático é aquele que podes chamar sem instanciar a classe. Os métodos estáticos são definidos na própria classe, não no objeto. Ou seja, não podes chamar um método estático sobre o objeto (rectangle), apenas sobre a classe (Rectangle), como se vê na linha 19.

Herança

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 criares herança entre classes, usa a palavra-chave extends.

Uma classe criada com herança herda todos os métodos de outra classe. No exemplo acima, a classe Model herda todos os métodos da classe Car.

A propriedade super() refere-se à classe pai. Ao chamar super() dentro do construtor, chamamos o construtor do pai e ganhamos acesso às suas propriedades e métodos.
A herança é útil para reaproveitar código: podes reutilizar as propriedades e os métodos de uma classe existente quando crias uma nova.

JavaScript

Damien Flandrin Programador web desde 2010, criador da Gekkode e do Email Impact. Cada artigo é testado num projeto real antes de ser publicado. Contacto
Newsletter

Os novos testes, tutoriais e projetos, por e-mail.

Testes reproduzíveis, código versionado, resultados datados. Nunca spam.