Hola principiante aquí, lo siento por cualquier ignorancia si mostré.
const test = { myfunction(){ console.log(this); }, myfunction3(){ function myfunction4(){ console.log(this) } return myfunction4() } }y cuando corro
test.myfunction3()Recibo un objeto global como una ventana. Estoy un poco confundido sobre cómo sucedió esto. Mi pregunta es
myfunction3() puede acceder a myfunction4() debido a su jerarquía? Si es así, ¿hay alguna forma de que pueda acceder a myfunction4() directamente en lugar de pasar por myfunction3()?this en myfunction4() devolvió una ventana global en lugar de una referencia a myfunction4() ?¡Gracias por tu ayuda!
1. No puede acceder a myfunction4 en tal método de "test.myfunction3.myfunction4()"
Porque myfunction4 no es propiedad de myfunction3 y, especialmente, test.myfunction3 no es un objeto.
2. Dado que myfunction4 no es un método, sino una función, "esto" hace referencia al objeto Window en myfunction4.
"esto" en el método se refiere al objeto principal, pero en función, se refiere a un objeto global como Ventana.
La razón por la que obtiene el objeto global tiene que ver con la llamada/invocación de su función y no con la ubicación de la función en sí.
Invocación, me refiero a ==> test.myFunction3()
Los métodos de objetos a menudo son un poco confusos, pero el hecho de que una función se encuentre dentro de otra función no significa nada. No se trata de la colocación de una función sino de su invocación... así que aquí lo que importa es test.myFunction3()
myfunction3() puede acceder a myfunction4() debido a su jerarquía? Si es así, ¿hay alguna forma de que pueda acceder a myfunction4() directamente en lugar de pasar por myfunction3()?
No puede acceder a la función directamente a través myFunction3() , pero puede devolverle una referencia, que luego puede usar. Vea a continuación donde señalo que tiene un error tipográfico en su implementación de myFunction3()
const func4 = myFunction3(); func4();¿Por qué esto en myfunction4() devolvió una ventana global en lugar de una referencia a myfunction4()?
Hay dos problemas, primero this en una función está vinculada en tiempo de ejecución.
En segundo lugar, debido a un error tipográfico en myFunction3() , está devolviendo el resultado de llamar a myFunction4 en lugar de devolver una referencia a la función en sí, que supongo que es lo que está tratando de hacer.
myfunction3(){ function myfunction4(){ console.log(this) } return myfunction4; // this returns the function, rather than return the result of calling the function (drop the () ) }