Funções de fábrica JavaScript

Resumo : neste tutorial, você aprenderá sobre as funções de fábrica do JavaScript, que são funções que retornam objetos.

Introdução às funções de fábrica em JavaScript

Uma função de fábrica é uma função que retorna um novo objeto . O seguinte cria um objeto pessoa chamado person1:

let person1 = {
  firstName: 'John',
  lastName: 'Doe',
  getFullName() {
    return this.firstName + ' ' + this.lastName;
  },
};

console.log(person1.getFullName());Linguagem de código:  JavaScript  ( javascript )

Saída:

John Doe

O person1objeto possui duas propriedades: firstNameand lastNamee um método getFullName()que retorna o nome completo.

Suponha que você precise criar outro objeto semelhante chamado person2, você pode duplicar o código da seguinte maneira:

let person2 = {
  firstName: 'Jane',
  lastName: 'Doe',
  getFullName() {
    return this.firstName + ' ' + this.lastName;
  },
};

console.log(person2.getFullName());Linguagem de código:  JavaScript  ( javascript )

Saída:

Jane Doe

Neste exemplo, os objetos person1e person2têm as mesmas propriedades e métodos.

O problema é que quanto mais objetos você deseja criar, mais código duplicado você terá.

Para evitar copiar o mesmo código novamente, você pode definir uma função que cria o personobjeto:

function createPerson(firstName, lastName) {
  return {
    firstName: firstName,
    lastName: lastName,
    getFullName() {
      return firstName + ' ' + lastName;
    },
  };
}Linguagem de código:  JavaScript  ( javascript )

Quando uma função cria e retorna um novo objeto, ela é chamada de função de fábrica. A createPerson()é uma função de fábrica porque retorna um novo personobjeto.

O seguinte mostra como usar a createPerson()função de fábrica para criar dois objetos person1e person2:

function createPerson(firstName, lastName) {
  return {
    firstName: firstName,
    lastName: lastName,
    getFullName() {
      return firstName + ' ' + lastName;
    },
  };
}

let person1 = createPerson('John', 'Doe');
let person2 = createPerson('Jane', 'Doe');

console.log(person1.getFullName());
console.log(person2.getFullName());Linguagem de código:  JavaScript  ( javascript )

Ao usar a função de fábrica, você cria qualquer número de personobjetos sem duplicar o código.

Quando você cria um objeto, o mecanismo JavaScript aloca memória para ele. Se você criar muitos personobjetos, o mecanismo JavaScript precisará de muito espaço de memória para armazenar esses objetos.

Porém, cada personobjeto possui uma cópia do mesmo getFullName()método. Não é um gerenciamento de memória eficiente.

Para evitar a duplicação da mesma getFullName()função em todos os objetos, você pode remover o getFullName()método do personobjeto:

function createPerson(firstName, lastName) {
    return {
        firstName: firstName,
        lastName: lastName
    }
}Linguagem de código:  JavaScript  ( javascript )

E mova este método para outro objeto:

var personActions = {
  getFullName() {
    return this.firstName + ' ' + this.lastName;
  },
};Linguagem de código:  JavaScript  ( javascript )

E antes de chamar o getFullName()método no personobjeto, você pode atribuir o método do personActionsobjeto ao personobjeto da seguinte maneira:

let person1 = createPerson('John', 'Doe');
let person2 = createPerson('Jane', 'Doe');

person1.getFullName = personActions.getFullName;
person2.getFullName = personActions.getFullName;

console.log(person1.getFullName());
console.log(person2.getFullName());Linguagem de código:  JavaScript  ( javascript )

Essa abordagem não é escalável se o objeto tiver muitos métodos porque você terá que atribuí-los manualmente e individualmente. É por isso que o Object.create()método entra em ação.

O método Object.create()

O Object.create()método cria um novo objeto usando um objeto existente como protótipo do novo objeto:

Object.create(proto, [propertiesObject])Linguagem de código:  CSS  ( css )

Então você pode usar o Object.create()seguinte:

var personActions = {
  getFullName() {
    return this.firstName + ' ' + this.lastName;
  },
};

function createPerson(firstName, lastName) {
  let person = Object.create(personActions);
  person.firstName = firstName;
  person.lastName = lastName;
  return person;
}Linguagem de código:  JavaScript  ( javascript )

Agora você pode criar personobjetos e chamar os métodos do personActionsobjeto:

let person1 = createPerson('John', 'Doe');
let person2 = createPerson('Jane', 'Doe');

console.log(person1.getFullName());
console.log(person2.getFullName());
Linguagem de código:  JavaScript  ( javascript )

O código funciona perfeitamente bem. Porém, na prática, você raramente usará as funções de fábrica. Em vez disso, você usa classes ou padrões de construtor/protótipo .

Resumo

  • Uma função de fábrica é uma função que retorna um novo objeto.
  • Use Object.create()para criar um objeto usando um objeto existente como protótipo.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *