Skip to content

Instantly share code, notes, and snippets.

@GlauberF
Forked from lamberta/parseFunction.js
Created May 4, 2021 17:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GlauberF/79ce015e05b534b22908ad9f71fd5032 to your computer and use it in GitHub Desktop.
Save GlauberF/79ce015e05b534b22908ad9f71fd5032 to your computer and use it in GitHub Desktop.
Parse a JavaScript string function definition and return a function object. Does not use eval.
/* Parse a string function definition and return a function object. Does not use eval.
* @param {string} str
* @return {function}
*
* Example:
* var f = function (x, y) { return x * y; };
* var g = parseFunction(f.toString());
* g(33, 3); //=> 99
*/
function parseFunction (str) {
var fn_body_idx = str.indexOf('{'),
fn_body = str.substring(fn_body_idx+1, str.lastIndexOf('}')),
fn_declare = str.substring(0, fn_body_idx),
fn_params = fn_declare.substring(fn_declare.indexOf('(')+1, fn_declare.lastIndexOf(')')),
args = fn_params.split(',');
args.push(fn_body);
function Fn () {
return Function.apply(this, args);
}
Fn.prototype = Function.prototype;
return new Fn();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment