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: paramonso en 03 de Marzo 2018, 12:25
-
Hola. Dejo el ejercicio resuelto del tema CU01168E this javascript significados namespace ejemplo ejercicio, del curso básico de programación para desarrolladores JavaScript.
a) ¿Por qué se muestran diferentes mensajes si en ambos alert estamos invocando this?
Porque cada this se invoca en una función diferente (una es interna a la otra) y cada función hace referencia a un elemento diferente.
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 función externa.
<!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 ()
{ theThis=this
alert(theThis);
setTimeout(function (){alert(theThis);}, 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>
-
Buenas, todo bien. Copio una explicación que me ha parecido interesante: "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."
Salu2