En Javascript, je peux créer une propriété d'objet avec des méthodes get/set :
function Field(arg){
var value = arg;
// Créer une propriété en lecture seule "value"
Object.defineProperty(this, "value", {
get: function () {
return value;
},
set: function () {
console.log("ne peut pas être défini");
}
});
}
var obj = new Field(10);
console.log(obj.value); // 10
obj.value = 20; // "ne peut pas être défini"
Définir la propriété value
est interdit ici.
En TypeScript, si je veux obtenir le même comportement, je devrais faire ceci (comme suggéré par get and set in TypeScript) :
class Field {
_value: number;
constructor(arg) {
this._value = arg;
}
get value() {
return this._value;
}
set value() {
console.log("ne peut pas être défini");
}
}
var obj = new Field(10);
console.log(obj.value); // 10
obj.value = 20; // "ne peut pas être défini"
obj._value = 20; // POSSIBILITÉ DE CHANGER LA VALEUR !
console.log(obj.value); // 20
Mais le problème est que la prétendue propriété privée _value
peut être accédée/changée par l'utilisateur directement sans passer par les méthodes get/set pour value
. Comment puis-je empêcher l'utilisateur d'accéder à cette propriété (_value
) directement ?