Funções construtoras


As funções construtoras (também chamadas de Constructor Functions) são utilizadas para criar objetos em JavaScript, mas de uma maneira um pouco diferente das funções fábricas.

Conforme a convenção, o nome de uma função construtora deve começar com letra maiúscula. Para invocar uma função construtora e, assim, instanciar um novo objeto, utiliza-se a palavra reservada new seguida do nome da função.

Sintaxe

Declaração de atributos públicos

function NomeDaFuncao([parâmetros...]) {
  this.atributo1 = parametro1;
  this.atributo2 = parametro2;
  // ...
}

Declaração de métodos públicos

function NomeDaFuncao([parâmetros...]) {
  this.metodo1 = function() {
    // Código
  }
 
  this.metodo2 = function() {
    // Código
  }
 
  // ...
}

Declaração de atributos privados

function NomeDaFuncao([parâmetros...]) {
  const ATRIBUTO1 = [valor];
  let ATRIBUTO2 = [valor];
  // ...
}

Declaração de métodos privados

function NomeDaFuncao([parâmetros...]) {
  const metodo1 = function() {
    // Código
  }
 
  const metodo2 = function() {
    // Código
  }
 
  // ...
}

Exemplos

Exemplo 1

// Função construtora
function Pessoa(nome, sobrenome) {
  this.nome = nome;
  this.sobrenome = sobrenome;
}
 
// Instanciação de objetos
const pessoa1 = new Pessoa("Luiz", "Otávio");
const pessoa2 = new Pessoa("Maria", "Oliveira");
 
console.log(pessoa1);
console.log(pessoa2);

Exemplo 2

function Pessoa(nome, sobrenome) {
  this.nome = nome;
  this.sobrenome = sobrenome;
 
  this.metodo = function () {
    console.log(this.nome + ": sou um método");
  };
}
 
const pessoa1 = new Pessoa("Luiz", "Otávio");
pessoa1.metodo();
 
console.log(pessoa1);
 
/*
Luiz: sou um método
Pessoa {
  nome: 'Luiz',
  sobrenome: 'Otávio',
  metodo: [Function (anonymous)]
}
*/

Exemplo 3

function Pessoa(nome, sobrenome) {
  const ID = 1234;
 
  const metodoInterno = function () {};
 
  this.nome = nome;
  this.sobrenome = sobrenome;
 
  this.metodo = function () {
    console.log(this.nome + ": sou um método");
  };
}
 
const pessoa1 = new Pessoa("Luiz", "Otávio");
pessoa1.metodo();
 
console.log(pessoa1);
 
/*
Luiz: sou um método
Pessoa {
  nome: 'Luiz',
  sobrenome: 'Otávio',
  metodo: [Function (anonymous)]
}
*/

Referências