Por ejemplo;
var s = "function test(){
alert(1);
}";
var fnc = aMethod(s);
Si esta es la cadena, quiero una función que se llame fnc. Y fnc();
aparece la pantalla de alerta.
eval("alert(1);")
no resuelve mi problema.
javascript
string
function
ymutlu
fuente
fuente
Una mejor manera de crear una función a partir de una cadena es usando
Function
:Esto tiene como ventaja / desventaja que las variables en el alcance actual (si no es global) no se aplican a la función recién construida.
Pasar argumentos también es posible:
fuente
Function
usted no contaminan el alcance local y es por eso queeval
hace que la optimización sea tan difícil para los motores ... Con el ejemplo de OP, yo haría:var fnc = Function('return '+s)();
element.onclick = function() { alert("test"); }
.Estás bastante cerca.
Aquí hay un violín que funciona .
fuente
eval
Advertencia obligatoria para futuros buscadores:eval
puede abrir lagunas para los piratas informáticos: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… pero si conoce sus peligros y puede evitarlos, esta es una forma sencilla y agradable de crear una función a partir de una cadenaSí, usar
Function
es una gran solución, pero podemos ir un poco más allá y preparar un analizador universal que analice la cadena y la convierta a una función JavaScript real ...ejemplos de uso:
aquí está jsfiddle
fuente
Nombres de funciones dinámicas en
JavaScript
Utilizando
Function
Fuente: http://marcosc.com/2012/03/dynamic-function-names-in-javascript/
Utilizando
eval
Utilizando
sjsClass
https://github.com/reduardo7/sjsClass
Ejemplo
fuente
Esta técnica puede ser en última instancia equivalente al método eval, pero quería agregarlo, ya que podría ser útil para algunos.
Esto es funcionalmente como agregar este elemento <script> al final de su documento, por ejemplo:
fuente
Use el
new Function()
con un retorno adentro y ejecútelo inmediatamente.fuente
Un ejemplo con argumentos dinámicos:
fuente