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 person1
objeto possui duas propriedades: firstName
and lastName
e 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 person1
e person2
tê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 person
objeto:
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 person
objeto.
O seguinte mostra como usar a createPerson()
função de fábrica para criar dois objetos person1
e 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 person
objetos sem duplicar o código.
Quando você cria um objeto, o mecanismo JavaScript aloca memória para ele. Se você criar muitos person
objetos, o mecanismo JavaScript precisará de muito espaço de memória para armazenar esses objetos.
Porém, cada person
objeto 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 person
objeto:
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 person
objeto, você pode atribuir o método do personActions
objeto ao person
objeto 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 person
objetos e chamar os métodos do personActions
objeto:
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.