Privatitet i gammel stil i OOP i JavaScript
Erklæring af private egenskaber og metoder
gennem symbolet # dukkede op i JavaScript
for nylig. Før det var man nødt til at
bruge en speciel snedig
teknik.
Essensen af denne teknik er, at man indgår en aftale om, at navnene på private egenskaber og metoder skal starte med en understregning. Reelt set vil sådanne navne ikke være private, men vi aftaler, at vi ikke vil bruge dem udefra klassen.
Lad os prøve. Lad os lave en privat egenskab i denne stil:
class User {
constructor(name) {
this._name = name;
}
show() {
return this._name;
}
}
Lad os oprette et objekt af klassen:
let user = new User('john', 'smit');
Lad os kalde metoden, der viser værdien af vores egenskab:
console.log(user.show());
Et forsøg på at tilgå egenskaben udefra klassen vil ikke resultere i en fejl:
console.log(user._name); // ingen fejl
Gør egenskaberne private i følgende kode:
class Employee {
constructor(name, salary) {
this._name = name;
this._salary = salary;
}
getName() {
return this._name;
}
getSalary() {
return this._salary;
}
}
Gør hjælpemetoden privat i følgende kode:
class Employee {
constructor(name, salary) {
this.name = name;
this.salary = salary;
}
getSalary() {
return this._addSign(this.salary);
}
_addSign(num) {
return num + '
;
}
}