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)]
}
*/