Ошибка ясна, геттер выдаёт
значение, а значение - объект. Вызвав один раз, мы сохранили прямую ссылку на объект в переменную, вот пароль и не нужен. Грубо говоря, при вызове
alert( passObj.p.a );
а далее, в конце вместо
a поставлять
b и
c, то пароль потребуется каждый раз. Также можно сделать функцию
let getObj = function acc() { return passObj.p }
и вызывать вот так:
alert( getObj().a );
Но, поместить геттер в переменную, похоже, увы, не получится - только её результат. А результат уже обнаружит себя, то есть поместить функцию (которая запрашивает пароль), под видом "просто объекта", уже врят ли получится...
Паролить на клиенте я не собираюсь, просто это наглядный(для меня) пример оболочки на объект. Как раз и хочу понять, насколько прозрачную можно сделать оболочку на объект и есть ли, при этом, альтернатива и прокси.