Вы не можете сделать это, используя обычный синтаксис класса и методы получения / установки. Проблема в том, что вы можете определить только конкретные получатели.
Чтобы определить получатель, который перехватывает все вызовы, вам необходимо использовать прокси
class A {
constructor() {
this._a = 1;
}
}
const handler = {
get: function(obj, prop) {
if (prop == 'a') {
return obj._a;
}
return `getting "${prop}" instead of "a"`;
}
};
const instance = new A();
const p = new Proxy(instance, handler);
console.log(p.a);
console.log(p.b);
console.log(p._a);
Если вы хотите «скрыть» определенные поля, например, все, что начинается с подчеркивания, вы можете сделать что-то вроде:
class A {
constructor() {
this._a = 1;
this._b = 2;
this._c = 3;
}
}
const handler = {
get: function(obj, prop) {
const secretProp = `_${prop}`;
//check if a property that starts with underscore is in the source object
if (secretProp in obj) {
return obj[secretProp];
}
return `getting "${prop}" is not allowed`;
}
};
const instance = new A();
const p = new Proxy(instance, handler);
console.log(p.a);
console.log(p.b);
console.log(p.c);
console.log(p._a);
console.log(p._b);
console.log(p._c);
console.log(p.foo);