2012-03-09 14 views
5

Ho una stringa che contiene la definizione della funzione anonymus, ma come posso chiamarla. Diciamo che la funzione è così:Come chiamare la funzione anonymus dalla stringa

var fn_str = "function(){ alert('called'); }"; 

Provato tentativo, ma ottenuto un errore che funzione deve avere un nome.

eval(fn_str).apply(this); // SyntaxError: function statement requires a name 
+0

si chiama '' eval' con a' mentre la stringa di funzione è in 'fn_str'. non funzionerà in questo modo ... – gdoron

+0

Scusa, ho usato una console Firebug per mancanza ma ho dimenticato di cambiarla, bello però – Kristian

risposta

5

È possibile utilizzare immediatamente Invocato Espressione Funzione:

var fn_str = "function(){ alert('called'); }"; 
eval('(' + fn_str +')();'); 

Immediately Invoked Function Expression

Un altro modo è quello di utilizzare per a Function oggetto (Se avete la stringa funzione del corpo):

var func = new Function("alert('called')"); 
func.apply(this); 
+1

Già capito, ma grazie! Accetta/+ 1 per una risposta rapida :) – Kristian

1

trovato la soluzione: mettere la funzione tra parentesi

var a = "(function(){ alert('called'); })"; 
eval(a).apply(this); 
+1

Non hai bisogno di scrivere usa 'apply' puoi usare * Espressioni di funzioni invocate immediatamente ** come ho risposto. – gdoron

+0

So che la sintassi, ma non posso passare un oggetto come parametro in questo modo (senza analizzare un oggetto in stringa). O posso? – Kristian

+0

Cosa intendevi in ​​quel commento, non l'ho capito. Di che cosa hai bisogno? – gdoron

Problemi correlati