Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: bermartinv en 02 de Marzo 2016, 16:28
-
Estas son mis respuestas para el tema CU01168E del curso JavaScript desde cero.
a) ¿Por qué se muestran diferentes mensajes si en ambos alert estamos invocando this?
Aunque usamos la misma palabra this, como la usamos en diferentes sitios hace referencia a distintos sitios. El primer this hace referencia al evento que es asignado de la variable cabecera, que esta proviene de la etiqueta que tiene el identificador #cabecera.Por eso al hacer alert de este this nos sale:
object HTMLDivElement
El segundo this lo encontramos en una función que está dentro de otra función. Por lo que este this hace referencia a la definicion de esta funcion. Por eso al hacer alert de este this nos sale:
objectWindow
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.
b)
Saludos.
-
Buenos días creo que te ha faltado el código del apartado b), aparece la pregunta en vez del código
Saludos
-
Si, perdón :-[ . Adjunto el código:
<!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 () {
var that = this;
alert(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>Ejemplos JavaScript</h3></div>
</body>
</html
Saludos.
-
Hola!
Todo bien
En el código propuesto se aplica la explicación del curso: " Toda función define un ámbito y una función dentro de otra función puede hacer que this no se refiera a lo mismo según dónde lo usemos. Por ejemplo, si tenemos una función anónima dentro de otra, this en la función externa puede estar haciendo referencia al objeto envolvente mientras que this en la función anónima puede estar haciendo referencia al objeto global window.
La solución para mantener una referencia a this en una función anónima interna puede estar en crear un closure. Definiríamos como variable local a la función externa var that = this;, y luego en la función anónima interna haríamos referencia a that, variable auxiliar que nos sirve para mantener la referencia deseada."
Saludos!