Cómo comprobar quién hace referencia a un objeto JavaScript
Este problema tiene solución.
El punto más crítico es obtener el nombre de la persona que llama. Debe usar el objeto de argumentos para leer la pila de llamadas js.
función de búsqueda(){
// Las dos oraciones siguientes son equivalentes
alert(search.caller.name); alerta(argumentos.callee.caller.name)
}
función baidu(){
búsqueda();
}
función google(){
buscar();
}
google();
baidu ( );
La ejecución del código anterior dará como resultado google y baidu respectivamente. La siguiente es una explicación de la descomposición del objeto de la llamada:
nombre y atributos de la persona que llama:
En js (el nombre correcto debe ser: ECMAScript), todo es un objeto, y no es necesario mencionar variables, incluso las funciones existen como objetos. Cada función tiene atributos de nombre y de llamador. El atributo de nombre devuelve el nombre de la función y el atributo de llamador devuelve el objeto de función que lo llamó (el objeto no es el nombre).
Objeto de argumentos y su atributo de destinatario:
La función generará un objeto de argumentos al comienzo de la llamada. Este objeto no solo puede leer los parámetros pasados a la función, sino también. pasar El atributo llamado devuelve el objeto de función que lo generó. En el ejemplo anterior, arguments.callee == objeto de función de búsqueda La ventaja de usar arguments.callee es que la corrección del programa no se verá afectada cuando se cambie el nombre de la función de búsqueda. .
Con base en los dos elementos anteriores, no es difícil entender que arguments.callee.caller.name es el nombre de la persona que llama de la función actual