Skip to content

Instantly share code, notes, and snippets.

@paulogesualdo
Created August 18, 2022 16:59
Show Gist options
  • Save paulogesualdo/bd1d480777c1248c607ce93e49976911 to your computer and use it in GitHub Desktop.
Save paulogesualdo/bd1d480777c1248c607ce93e49976911 to your computer and use it in GitHub Desktop.
Utilizar uma função Factory como construtora (factory function constructor)
// Considerando um objeto celular
const celularSamsung = {
marca: 'Samsung',
tamanhoTela: {
vertical: 155,
horizontal: 75
},
bateria: 5000,
ligar: function(){
console.log('Fazendo ligação de um Samsung...')
}
};
console.log(celularSamsung);
celularSamsung.ligar();
console.log();
// É possível fazer uma função que cria celulares
function criarCelularSamsung(){
const celularSamsung = {
marca: 'Samsung',
tamanhoTela: {
vertical: 155,
horizontal: 75
},
bateria: 5000,
ligar: function(){
console.log('Fazendo ligação de um Samsung...')
}
}
return celularSamsung;
}
const s21 = criarCelularSamsung();
console.log(s21);
s21.ligar();
console.log();
// Podemos refatorar esta função
// passando o return para cima
function criarCelularSamsung2(){
return {
marca: 'Samsung',
tamanhoTela: {
vertical: 155,
horizontal: 75
},
bateria: 5000,
ligar: function(){
console.log('Fazendo ligação de um Samsung...')
}
}
}
const s22 = criarCelularSamsung2();
console.log(s22);
s22.ligar();
console.log();
// E também podemos transformar a função em
// um construtor, que crie celulares de qualquer marca
function criarCelular(marca, tamanhoVertical, tamanhoHorizontal, bateria){
return {
marca: marca,
tamanho: {
vertical: tamanhoVertical,
horizontal: tamanhoHorizontal
},
bateria: bateria,
ligar: function (){
console.log(`Fazendo ligação de um ${marca}...`);
}
}
}
const motoG = criarCelular('Motorola', 150, 75, 4000);
console.log(motoG);
motoG.ligar();
console.log();
// Podemos refatorar o construtor, pois quando o
// nome da chave é o mesmo nome do valor, podemos
// escrever somente uma vez
function criarCelular2(marca, tamanhoVertical, tamanhoHorizontal, bateria){
return {
marca,
tamanho: {
vertical: tamanhoVertical,
horizontal: tamanhoHorizontal
},
bateria,
ligar: function () {
console.log(`Fazendo ligação de um ${marca}...`)
}
}
}
const redmi = criarCelular2('Xiaomi', 160, 80, 6000);
console.log(redmi);
redmi.ligar;
console.log();
// Podemos refatorar mais uma vez utilizando
// arrow-function para a função ligar
function criarCelular3(marca, tamanhoVertical, tamanhoHorizontal, bateria){
return {
marca,
tamanho : {
vertical: tamanhoVertical,
horizontal: tamanhoHorizontal
},
bateria,
ligar: () => console.log(`Fazendo ligação de um ${marca}...`)
}
}
const k52 = criarCelular3('LG', 155, 75, 5000);
console.log(k52);
k52.ligar();
{
marca: 'Samsung',
tamanhoTela: { vertical: 155, horizontal: 75 },
bateria: 5000,
ligar: [Function: ligar]
}
Fazendo ligação de um Samsung...
{
marca: 'Samsung',
tamanhoTela: { vertical: 155, horizontal: 75 },
bateria: 5000,
ligar: [Function: ligar]
}
Fazendo ligação de um Samsung...
{
marca: 'Samsung',
tamanhoTela: { vertical: 155, horizontal: 75 },
bateria: 5000,
ligar: [Function: ligar]
}
Fazendo ligação de um Samsung...
{
marca: 'Motorola',
tamanho: { vertical: 150, horizontal: 75 },
bateria: 4000,
ligar: [Function: ligar]
}
Fazendo ligação de um Motorola...
{
marca: 'Xiaomi',
tamanho: { vertical: 160, horizontal: 80 },
bateria: 6000,
ligar: [Function: ligar]
}
{
marca: 'LG',
tamanho: { vertical: 155, horizontal: 75 },
bateria: 5000,
ligar: [Function: ligar]
}
Fazendo ligação de um LG...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment