Hola Pedro!!
Revisando tu código y respuestas (después de discutirlo un rato) hemos visto que además de que tu código está bien planteado para los objetivos del ejercicio, que era comprobar cómo el uso de métodos de objetos permite evitar el conflicto de nombres respecto a funciones definidas en el ámbito global, convenía modificar la redacción del ejercicio para que quedara más clara.
La redacción inicial era:
Crea un objeto vacío denominado GestionDeUsuarios y añádele dos métodos: un método preguntarNombre y un método despedir. Al invocar GestionDeUsuarios.preguntarNombre(user) se debe crear un objeto de tipo usuario con id de usuario user y almacenar su nombre e id de usuario. Al invocar el método GetionDeUsuarios.despedir(user) se debe mostrar un mensaje de despedida “Hasta luego nombreDeUsuario” donde nombreDeUsuario será el nombre correspondiente.
Ahora la hemos dejado:
Crea un objeto vacío denominado GestionDeUsuarios y añádele dos métodos: un método preguntarNombre y un método despedir. Al invocar GestionDeUsuarios.preguntarNombre() se debe establecer la propiedad nombre del objeto con un nombre introducido por el usuario y un id de usuario introducido también por el usuario. Al invocar el método GestionDeUsuarios.despedir() se debe mostrar un mensaje de despedida “Hasta luego nombreDeUsuario” donde nombreDeUsuario será el nombre correspondiente.
Teniendo en cuenta estos cambios hemos modificado ligeramente tu código para dejar la respuesta así.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">
<style>
#pulsador {padding:15px; width: auto; display: inline-block; margin: 25px; cursor: pointer; color: yellow; border-radius: 40px; background: purple;}
</style>
<script type="text/javascript">
var gestionDeUsuarios = {};
Object.defineProperty(gestionDeUsuarios,'usuario',{value:'',writable:true},'idUsuario',{value:0,writable:true});
gestionDeUsuarios.preguntarNombre = function(){
var usuario = prompt('Introduzca el nombre del usuario: ');
var idUsuario = prompt('Introduzca el id del usuario: ');
gestionDeUsuarios.usuario=usuario;
gestionDeUsuarios.idUsuario=idUsuario;
}
gestionDeUsuarios.despedir = function(){
alert('(Desde método despedir) Hasta luego ' + gestionDeUsuarios.usuario);
}
function despedir(){
alert('(Desde función despedir()) ... Hasta luego ' + gestionDeUsuarios.usuario);
}
function testObjetos() {
gestionDeUsuarios.preguntarNombre();
gestionDeUsuarios.despedir();
alert ('Tenemos un objeto gestionDeUsuarios con propiedades nombre: '+gestionDeUsuarios.usuario + 'e id: '+gestionDeUsuarios.idUsuario);
despedir();
}
</script>
</head>
<body>
<div id="cabecera"><h2>Cursos aprenderaprogramar.com</h2></div>
<div id ="pulsador" onclick="testObjetos()"> Probar </div>
</body>
</html>
Hemos trasladado la ejecutoria a una función testObjetos para que se vea más clara la traza. Perdona las molestias, si te queda alguna duda consúltala.
Saludos!!