Autor Tema: this ámbitos scope JavaScript cómo hacer accesible this dentro función CU01168E  (Leído 1960 veces)

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas. Aquí expongo una posible solución del ejercicio CU01168E del curso JavaScript desde cero.

Citar
EJERCICIO

Analiza el siguiente código y responde a las siguientes preguntas:

Código: [Seleccionar]
<!DOCTYPE html>

<html><head><title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">

<script type="text/javascript">

function ejemplo() {

var cabecera = document.querySelector('#cabecera');

var respuestaCabecera = function () {

  alert(this);

  setTimeout(function () { alert(this);}, 2000);

};

cabecera.addEventListener('click', respuestaCabecera, false);

}

</script>

</head>

<body onload="ejemplo()"><div id="cabecera"><h2>Cursos aprenderaprogramar.com HAZ CLICK AQUÍ</h2><h3>Ejemplos JavaScript</h3></div>

</body>
</html>

Citar
a) ¿Por qué se muestran diferentes mensajes si en ambos alert estamos invocando this?

El primer this que se muestra hace referencia al elemento DOM que tiene asociado el evento, en cambio, en el segundo this hace referencia al objeto global window.

Citar
b) Modifica el código para que el mensaje que se muestre con retardo muestre lo mismo que el mensaje que se muestra sin retardo. Para ello, haz que en la función anónima sea conocida la referencia a this que existe en la funcion externa.

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

function ejemplo(){
var cabecera = document.querySelector('#cabecera');
var respuestaCabecera = function(){
alert(this);
var that = this;
setTimeout(function(){alert(that);},2000);
};
cabecera.addEventListener('click',respuestaCabecera, false);
}

</script>
</head>
<body onload="ejemplo()">
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com HAZ CLICK AQUÍ</h2>
<h3>Ejemplo JavaScript</h3>
</div>
</body>
</html>

Gracias.
« Última modificación: 07 de Abril 2016, 13:44 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola! Todo bien!

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".