En ciertas ocasiones puede ser necesario crear funciones a partir de una cadena de texto. Permitiendo así añadir nuevas funcionalidades al código sin necesidad de modificar el programa original. Algo que puede ser un problema de seguridad debido a que se podría ejecutar cualquier código, pero aún así puede ser útil. A continuación, se van a presentar tres métodos para crear una función desde una cadena de texto en JavaScript.
Los métodos expuestos en esta entrada solamente se deben utilizar cuando sea estrictamente necesario. Cuando no exista otra alternativa mejor para implementar la funcionalidad. El uso tanto de eval
como Function
presentan serios problemas de seguridad ya que en ambos casos se facilita la inyección de cualquier código que puede alterar el correcto funcionamiento del programa. Incrementa el tiempo de ejecución debido a que el código no se puede optimizar. Además, hace que sea más complicada la depuración de los programas.
Utilización de la función eval
La función eval
de JavaScript permite ejecutar el contenido de las cadenas de texto como si fuese una línea más del programa. Pudiendo modificar las variables. Por lo que un método con el que se pueden funciones en tiempo de ejecución. Así para crear una función que pueda sumar dos números se puede utilizar.
eval('var fun = function (a, b) { return a + b; }')
Mediante lo que se creará una nueva función llamada fun
que implementa la suma de dos números.
El constructor Function
Otra forma con la que se puede crear código a partir de una cadena de texto es mediante el constructor Function
. Tal como indica su nombre permite construir objetos tipo función, siendo sus parámetros son los parámetros y el cuerpo de la nueva función. Así, para crear una función que sume dos valores se puede hacer con la siguiente línea de código.
var fun = new Function('a', 'b', 'return a + b;');
Al igual que en el caso anterior se puede crear una función con cualquier código.
El constructor Function
más la palabra clave return
El constructor Function
también permite construir funciones utilizando return
antes de llamar a una función. Así en el caso de que se tenga la función completa en una variable se puede crear la función con este constructor.
var func = new Function('return' + 'function (a, b) { return a + b; }')();
Nótese que en esta ocasión al finalizar el código se incluye dos paréntesis para guardar la función en la variable.
Conclusiones
En esta entrada se han visto tres métodos para crear una función desde una cadena de texto en JavaScript. Lo que permite incluir la posibilidad de modificar el funcionamiento de los programas sin modificar el código. Aún así estos deberían ser básicamente una curiosidad, ya que su utilización produce programas con problemas de seguridad y difíciles de depurar.
Imágenes: Pixabay (Free-Photos)
No te olvides valorar esta entrada
Suscríbete a nuestro boletín
Suscríbete al boletín semanal para estar al día de todas las publicaciones de Analytics Lane.