Alcance de la ventana de la consola Firebug. ¿Por qué no es & # 8220; este & # 8221; ¿siempre lo mismo?
-
05-07-2019 - |
Pregunta
Ámbito de la consola Firebug. ¿Por qué no es " esto " ¿siempre lo mismo? No debería ser " ventana " todo el tiempo?
Solución
El valor de this
en la consola será el mismo que el valor de this
en el código que se está ejecutando actualmente. Considera: -
function outer()
{
// this is window
var x = {n:12};
var fn = function()
{
// this is object {n:12}
alert(this.n);
}
fn.call(x);
}
...
<img src="thing.gif" onclick="outer()" />
Si coloca un punto de interrupción en la línea x = {n: 12}
, cambie a la consola y encontrará que este
es la ventana. Sin embargo, cuando pasa a la línea de alerta
, este
en la consola es el objeto que contiene la variable x
. IOW no hay distinción entre this
en el contexto de ejecución y la consola. Es por esta razón que puedes usar la consola para modificar los valores de las variables y las propiedades durante la depuración.
Otros consejos
En una función llamada directamente sin un objeto propietario explícito, hace que el el valor de esto para ser el predeterminado objeto (ventana en el navegador).
En una función llamada usando el método sintaxis de invocación, como
objname.myFunction ()
oobjname ['myFunction'] ()
, causa el el valor de esto es ser objname.
Ver más funciones de llamadas abot en JavaScript
La palabra clave esta
siempre se refiere al propietario de la función a la que se llama. Puede leer una explicación clara y detallada sobre esto aquí .
Desde el artículo que vinculé encima de esta imagen, creo que lo explica más claramente: