Use getters e setters
O uso de getters e setters para acessar dados pode ser melhor que simplesmente procurar por uma propriedade em um objeto. Talvez você pergunte: "Por quê?!". Bom, aqui você vai ver uma lista desorganizada de motivos:
- Quando você quer fazer mais do que obter a propriedade de um objeto, você não tem que procurar e mudar cada dado acessível na sua base de códigos.
- Simplifica a inclusão de validações ao usar um
set
. - Encapsula a representação interna.
- Facilidade de inclusão de tratamento de registros e erros no momento de obtenção e configuração.
- Você pode fazer o carregamento lento das propriedades do seu objeto, vamos dizer obtendo-as de um servidor.
Não é recomendável:
function makeBankAccount() {
// ...
return {
balance: 0
// ...
};
}
const account = makeBankAccount();
account.balance = 100;
É recomendável:
function makeBankAccount() {
// this one is private
let balance = 0;
// a "getter", made public via the returned object below
function getBalance() {
return balance;
}
// a "setter", made public via the returned object below
function setBalance(amount) {
// ... validate before updating the balance
balance = amount;
}
return {
// ...
getBalance,
setBalance
};
}
const account = makeBankAccount();
account.setBalance(100);
Faça com que objetos tenham membros privados
Esse feito pode ser alcançado por meio de closures (ES5 e versões anteriores)
Não é recomendável:
const Employee = function(name) {
this.name = name;
};
Employee.prototype.getName = function getName() {
return this.name;
};
const employee = new Employee("John Doe");
console.log(`Employee name: ${employee.getName()}`); // Employee name: John Doe
delete employee.name;
console.log(`Employee name: ${employee.getName()}`); // Employee name: undefined
É recomendável:
function makeEmployee(name) {
return {
getName() {
return name;
}
};
}
const employee = makeEmployee("John Doe");
console.log(`Employee name: ${employee.getName()}`); // Employee name: John Doe
delete employee.name;
console.log(`Employee name: ${employee.getName()}`); // Employee name: John Doe
E aí? Gostaram? Até a próxima tradução! 🤗
Top comments (0)