Каждое выполнение функции хранит все переменные в специальном объекте с кодовым именем [[scope]], который нельзя получить в явном виде, но он есть .
Каждый вызов var... - всего лишь создает новое свойство этого объекта, а любое упоминание переменной - первым делом ищется в свойствах этого объекта.
Что-то у вас пошло не так..
А для доступа к свойствам прототипов используйте:
// Чтение. Возвращает obj.__proto__
Object.getPrototypeOf(obj);
// Запись. Устанавливает obj.__proto__ = proto
Object.setPrototypeOf(obj, proto);