2010-10-04 28 views
17

È possibile in qualche modo impostare un nome per le funzioni anonime?Denominazione di una funzione anonima

Non è necessario aggiungere nomi di funzioni allo spazio dei nomi per le funzioni anonime, ma vorrei evitare di vedere una grande quantità di (?) Nel mio debugger javascript in modo da poter mantenere la traccia dello stack delle chiamate informativa.

Inoltre, posso tranquillamente passare le normali funzioni dichiarate come argomenti invece che come funzioni anonime o farò alcuni strani errori. Sembra funzionare.

$("object").bind("click", function() { alert("x"); }); 

$("object").bind("click", function debuggingName() { alert("x"); }); 

[Edit]

volevo dire qualcosa sulla calibro di

$("object").bind("click", function() { Function.Name = "debuggingName"; alert("x"); }); 
+4

@Raynos - una funzione anonima con nome è una contraddizione in termini !! – InSane

+0

Stai ricevendo qualche errore quando usi il tuo secondo costrutto sopra? –

+0

Voglio solo impostare qualcosa all'interno di una funzione anonima che il debugger può raccogliere e visualizzare come un utile nome della funzione di debug. Voglio usarli esattamente come userò le funzioni anonime – Raynos

risposta

17

Il secondo esempio è utilizzando una chiamato funzione di espressione, che funziona bene nella maggior parte dei browser, ma ha alcuni problemi in IE che si dovrebbe essere a conoscenza prima di utilizzarlo. Raccomando di leggere kangax's excellent article on this subject. .

+0

Grazie, ero preoccupato che il passaggio di un'espressione di funzione con nome possa causare errori. – Raynos

+0

Oh, questo è un bell'articolo. Non ho notato che c'era davvero una differenza tra le espressioni di funzione nominate e la dichiarazione di funzione. – Raynos

+0

Sì, stavo giusto scrivendo un commento sottolineando :) –

-3

una funzione anonima è una funzione senza un nome, è eseguito dal punto in cui è definito. In alternativa, è possibile definire la funzione di debug prima di utilizzarla.

function debuggingName() { 
    alert("x"); 
} 

$("object").bind("click", debuggingName); 
0

Se dinamica nome della funzione è la questione. Si può provare questo:

function renameFunction(name, fn) { 
    return (new Function("return function (call) { return function " + name + 
     "() { return call(this, arguments) }; };")())(Function.apply.bind(fn)); 
} 

renameFunction('dynamicName',function() { debugger })(); 

fonte: Nate Ferrero a How to dynamically set a function/object name in Javascript as it is displayed in Chrome

+1

Ho appena visto una soluzione migliore per questo all'indirizzo http://stackoverflow.com/questions/5871040/how-to-dynamically-set-a-function-object-name-in-javascript-as-it-is- shown-i –

+0

Non farlo mai. È sciocco e prolisso. –

Problemi correlati