JavaScript: ottenere il nome di una funzione in modo cross-browser

JavaScript: ottenere il nome di una funzione in modo cross-browser

Alcuni browser (come Firefox) espongono il nome delle funzioni tramite la proprietà name associata a ciascun oggetto Function. In questo articolo vi mostrerò come ottenere il nome di una funzione in modo cross-browser. Non ho testato in modo approfondito la mia soluzione, quindi vi invito a suggerire miglioramenti e correzioni.

Chiameremo il nostro metodo getFunctionName() e lo assoceremo a ciascun oggetto Function tramite la sua proprietà prototype:


if(typeof Function.prototype.getFunctionName !== 'function') {


  Function.prototype.getFunctionName = function() {
  
  
    var name = '';
    var self = this;
    var string = self.toString();
    
    var sanitized = string.replace(/\s+/g, '').
                    replace('function', '').
                    replace('(', '').
                    replace(')', '');
    
    var re = /.+\{/;
    
    var matches = sanitized.match(re);
    
               
    name = matches[0].replace('{', '');
    
    return name;
  
  
  };


}

Prima di tutto verifichiamo che il metodo non sia già stato implementato in modo nativo. Quindi trasformiamo la funzione in stringa e, tramite le espressioni regolari, isoliamo soltanto la parte relativa al nome, ossia quello che viene dopo function e precede () {.

Un esempio:


window.onload = function() {

	function func() {
		alert('OK');
	}

	function funcForTest () {

  		return;

	}

  var container = document.createElement('p');
  container.innerHTML = func.getFunctionName() + '<br/>' + funcForTest.getFunctionName();
  var body = document.body;
  
  body.appendChild(container);
  

};

Potete visionare l'esempio finale in questa pagina.

Torna su