Privatitet i gammel stil i OOP i JavaScript
Erklæring av private egenskaper og metoder
via symbolet # dukket opp i JavaScript
for nylig. Før det måtte man
bruke et spesielt triks.
Essensen av dette trikset er at man inngår en avtale om at navn på private egenskaper og metoder skal starte med understrekingssymbolet. I virkeligheten vil slike navn ikke være private, men vi avtaler at vi ikke skal bruke dem utenfra klassen.
La oss prøve. La oss lage en privat egenskap i denne stilen:
class User {
constructor(name) {
this._name = name;
}
show() {
return this._name;
}
}
La oss opprette et objekt av klassen:
let user = new User('john', 'smit');
La oss kalle metoden som viser verdien av vår egenskap:
console.log(user.show());
Et forsøk på å få tilgang til egenskapen utenfra klassen vil ikke føre til en feil:
console.log(user._name); // ingen feil
I følgende kode, gjør egenskapene private:
class Employee {
constructor(name, salary) {
this.name = name;
this.salary = salary;
}
getName() {
return this.name;
}
getSalary() {
return this.salary;
}
}
I følgende kode, gjør hjelpemetoden privat:
class Employee {
constructor(name, salary) {
this.name = name;
this.salary = salary;
}
getSalary() {
return this.addSign(this.salary);
}
addSign(num) {
return num + ' kr';
}
}