геттеры и сеттеры прозрачные , что означает, что наблюдатель (консоль) не может различить guish между обычным свойством и геттером / сеттером.
Как это происходит, если я не устанавливаю "мощность" явно где-либо?
Я думаю, консоль оценивает все значения объекта один раз, затем она связывает эти значения с соответствующий объект, владеющий этими свойствами. В противном случае ему придется оценивать геттер дважды (один раз для объекта и один раз для прототипа), и это поведение, вероятно, нежелательно.
Вы можете вручную оценить геттер на прототипе:
class See { get me() { return "now"; } }
console.log(See.prototype.me);
Реально ли реализовать приватное / защищенное в этом примере?
Да, используя IIFE вокруг карты, которая конечно, возможно в ES6:
const Private = (() => {
const priv = new WeakMap();
return class {
get priv() { return priv.get(this); }
set priv(v) { priv.set(this, v); }
};
})();
Но, как уже отмечалось в комментариях, вам, вероятно, это не нужно. А для ES2020 есть частные свойства, как вы сказали.