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();