Sto sviluppando un'applicazione javascript che consiste di molti oggetti e funzioni (metodi oggetto). Voglio essere in grado di registrare molti eventi nel ciclo di vita dell'applicazione. Il mio problema è che all'interno del logger voglio sapere quale funzione ha richiamato la voce di log, così posso salvare quei dati insieme al messaggio di log. Ciò significa che ogni funzione deve in qualche modo essere in grado di fare riferimento a se stessa, quindi posso passare tale riferimento al registratore. Sto usando la modalità javascript strict, quindi l'utilizzo di arguments.callee
all'interno della funzione non è consentito.Come fare riferimento a una funzione all'interno della propria implementazione?
Ecco un esempio di codice molto semplificato che è possibile eseguire. Sto solo usando qui alert
invece del mio logger per semplicità.
(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();
})();
- Nel primo avviso -
this
relative almyObject
e nonmyFunc
- Nel secondo avviso I - ho fatto riferimento alla funzione con il suo nome, che io non voglio fare, come ho Sto cercando un modo generico per fare riferimento a una funzione all'interno della sua stessa implementazione.
- Terzo avviso: apri le tue idee.
- Il quarto avviso - avrebbe funzionato se non avessi
"use stict";
. Voglio mantenere la modalità rigorosa poiché fornisce prestazioni migliori e costituisce una buona pratica di codifica.
Qualsiasi input sarà apprezzato.
Se non hai familiarità con la "rigorosa modalità", questo è un buon posto letto su di esso: JavaScript Strict Mode
Grazie! Queste sono soluzioni interessanti :) –