Objekte und Datenstrukturen
Getter- und Setter-Methoden verwenden
Der Zugriff auf Objektdaten mittels Gettern und Settern ist direkten Property-Zugriffen vorzuziehen. Warum? Im Folgenden finden Sie eine ungeordnete Liste von Gründen:
- Bei erweiterten Anforderungen an Property-Zugriffe müssen Sie nicht sämtliche Zugriffspunkte in der Codebasis suchen und anpassen
- Einfache Validierung bei
set-Operationen - Kapselung der internen Repräsentation
- Einfache Integration von Logging und Fehlerbehandlung bei Lese- und Schreibzugriffen
- Lazy Loading von Objektproperties ermöglicht (z.B. Serverabfrage bei Bedarf)
Nicht empfohlen:
javascript
function makeBankAccount() {
// ...
return {
balance: 0
// ...
};
}
const account = makeBankAccount();
account.balance = 100;Empfohlen:
javascript
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);Private Objektmember implementieren
Für ES5 und ältere Versionen lässt sich dies durch Closures realisieren
Nicht empfohlen:
javascript
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: undefinedEmpfohlen:
javascript
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