Вы что-то очень странное написали, чтобы понять что у вас в коде происходит нужно пару минут (мне, во всяком случае).
Зачем вам подобная конструкция - непонятно.
"Запаролили" свойства объекта и сразу же к ним обращаетесь.
Вопрос: нафига нам вообще объект passObj, если проверка пароля происходит сразу же после? Чем обычный if не угодил?
Паролить объекты на клиенте - глупость, посмотреть их содержимое труда не составит.
Если хотите поиграться, то используйте для своей задачи
Proxy.
Пароль у вас запрашивается только единожды потому, что у вас так код написан.
Строка 19 - вызов геттера из строк 12..15;
Если пароль верный, то в переменную obj записывается объект, на который до перезаписи значения ссылается переменная obj. Если пароль кривой, то в переменную obj записывается undefined, т.к. alert ничего не возвращает.
В итоге вы либо каждый раз (строки 21..23) просто обращаетесь напрямую к изначальному объекту, либо к undefined.