Estoy desarrollando una aplicación de JavaScript que consta de muchos objetos y funciones (métodos de objetos). Quiero poder registrar muchos eventos en el ciclo de vida de la aplicación. Mi problema es que dentro del registrador quiero saber qué función invocó la entrada del registro, así que puedo guardar esos datos junto con el mensaje de registro. Esto significa que cada función debe ser de alguna manera capaz de referenciarse a sí misma, por lo que puedo pasar esa referencia al registrador. Estoy usando el modo estricto de JavaScript, por lo que no está permitido usar arguments.callee
dentro de la función.¿Cómo hacer referencia a una función desde su propia implementación?
Aquí hay una muestra de código muy simplificado que puede ejecutar. Solo estoy usando aquí alert
en lugar de mi registrador para simplificar.
(function(){
"use strict";
window.myObject = {
id : 'myObject',
myFunc : function(){
alert(this.id); // myObject
alert(this.myFunc.id); // myFunc - I don't want to do this. I want something generic for all functions under any object
alert('???') // myFunc
alert(arguments.callee.id); // Will throw an error because arguments.callee in not allowed in strict mode
}
}
myObject.myFunc.id = 'myFunc';
myObject.myFunc();
})();
- En la primera alerta -
this
relacionada conmyObject
y no amyFunc
- En la segunda alerta I - I hace referencia a la función por su nombre, que no quiero hacer, como yo Estoy buscando una forma genérica para hacer referencia a una función desde su propia implementación.
- La tercera alerta: abierta para sus ideas.
- La cuarta alerta: habría funcionado si no hubiera
"use stict";
. Quiero mantener el modo estricto ya que proporciona un mejor rendimiento y constituye una buena práctica de codificación.
Cualquier entrada será apreciada.
Si usted no está familiarizado con el "modo estricto", este es un buen lugar leer sobre él: JavaScript Strict Mode
¡Gracias! Esas son soluciones geniales :) –