Categories
Desenvolvimento

Sintaxe OOP para JavaScript em 5 minutos

Criar uma classe

class Funcionario {

}

Adicionar um construtor

class Funcionario {
    constructor () {
    }
}

Criar propriedades

class Funcionario {
    constructor (nome, salario) {
        this._nome = nome;
        this._salario = salario;
        this._bonificacao = 1.05;
    }
}

Criar método

class Funcionario {
    constructor (nome, salario) {
        this._nome = nome;
        this._salario = salario;
        this._bonificacao = 1.05;
    }
    calculaSalarioFinal () {
        return this._salario * this._bonificacao;
    }
}

Propriedades estáticas

class Funcionario {
    static contador = 0;

    constructor (nome, salario) {
        this._nome = nome;
        this._salario = salario;
        this._bonificacao = 1.05;

        Funcionario.contador += 1;
    }
    calculaSalarioFinal () {
        return this._salario * this._bonificacao;
    }
}

Getters e setters

class Funcionario {
    static contador = 0;

    constructor (nome, salario) {
        this._nome = nome;
        this._salario = salario;
        this._bonificacao = 1.05;

        Funcionario.contador += 1;
    }
    calculaSalarioFinal () {
        return this._salario * this._bonificacao;
    }
    get nome () {
        return this._nome;
    }
    set nome (novoNome) {
        this._nome = novoNome;
    }
}

Herança

class Gerente extends Funcionario {
    constructor (nome, salario) {
        super(nome, salario);
        this._bonificacao = 1.07;
    }
}
class Diretor extends Funcionario {
    constructor (nome, salario) {
        super(nome, salario);
        this._bonificacao = 1.09;
    }
}

Sobrescrever um método

class Diretor extends Funcionario {
    constructor (nome, salario) {
        super(nome, salario);
        this._bonificacao = 1.09;
    }
    calculaSalarioFinal (adicional=0) {
        return super.calculaSalarioFinal() + adicional;
    }
}

Simular um classe abstrata

class MinhaClasse {
    constructor () {
        if (this.constructor === MinhaClasse) {
            throw new Error('"MinhaClasse" é abstrata');
        }
    }
}

Simular um método abstrato

class MinhaClasse {
    constructor () {
        if (this.constructor === MinhaClasse) {
            throw new Error('"MinhaClasse" é abstrata');
        }
    }
    meuMetodo () {
        throw new Error('Método não implementado');
    }
}

Referências

  • https://cursos.alura.com.br/course/javascript-polimorfismo
  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes