JSFiddle - React, Tailwind, and code Playground
by danShumway
JavaScript
//Copyright 2014 Daniel Shumway
//Licensed under MIT
Function.snapshotFunction = function(danShumway_snapshotFunction_func, danShumway_snapshotFunction_keyValues){
for(var danShumway_snapshotFunction_i = 0; danShumway_snapshotFunction_i < danShumway_snapshotFunction_keyValues.length; danShumway_snapshotFunction_i+=2){
eval("var " + danShumway_snapshotFunction_keyValues[danShumway_snapshotFunction_i] + " = danShumway_snapshotFunction_keyValues[danShumway_snapshotFunction_i + 1]");
}
eval("var toReturn = " + danShumway_snapshotFunction_func);
return toReturn;
}
//Predefined json from an external file.
var cat = {
"name": "cat",
"sounds": ["hiss", "meow"]
}
var dog = {
"name": "dog",
"sounds": ["bark", "growl"]
}
//In Javascript
function AnimalFactory(_json) {
var myAnimal = {}; myAnimal.name = _json.name;
for(var s in _json.sounds){
var mySound = _json.sounds[s];
myAnimal["say"+mySound] = Function.snapshotFunction(function(){
console.log(mySound); }, ["mySound", mySound]);
}
myAnimal.mutate = function(funcString, func){
myAnimal[funcString] = Function.snapshotFunction(func, ["mySound", "Allen!"]);
}
return myAnimal;
}
var myCat = AnimalFactory(cat);
myCat.sayhiss(); //
myCat.mutate("sayhiss", myCat.sayhiss);
myCat.sayhiss();