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
Functionusted no contaminan el alcance local y es por eso queevalhace 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
evalAdvertencia obligatoria para futuros buscadores:evalpuede 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
Functiones 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
JavaScriptUtilizando
FunctionFuente: http://marcosc.com/2012/03/dynamic-function-names-in-javascript/
Utilizando
evalUtilizando
sjsClasshttps://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