Problem

Generating an independent to outer variables function, containing data derived during runtime, with a real parse-able function, not a messy unreadable, multiline string.

So, basically, I want to have a real function to be a template, which will during runtime be filled with some data and regenerated.

For example, the following:

var initialFunc = function() {
	var someObject = {
		prop: valueToReplace
	};
	return someObject;
};

might later become:

var initialFunc = function() {
	var someObject = {
		prop: "this was derived during runtime"
	};
	return someObject;
};

Why

You are probably wondering why not just generate it like that in first place - because the data is gathered during runtime.

Then the options are:

  • Concatenate a (sometimes really) big, multiline, messy string;
  • This solution.

Solution

Here is how the regeneration process would look like:

var generated = new Function( "(" + function(valueToSwap) {
	var someObject = {
		prop: valueToSwap
	};
	return someObject;
} + ")(\"" + value + "\");" );
// the quotes are only necessary for string params of course

What this baby does, is:

  • Converts the passed real parsed function to string
  • Creates a function wrapping a self execution function and
  • The self execution function passes itself the needed parameters

I would recommend on creating a func that generates the parameter list, that is passed, so there are no hardly readable parts of the generation.

That's it.

Comments on HN.