eval class dynamic name

by gschutz

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.9.3/lodash.min.js"></script>

(function(exports) {
function tt(Name) {
    eval('function '+Name+'(){\
        o = _.defaults(o || {}, {\
        guid: _.random(1000,9999)\
        });\
        _.assign(this,o);\
    }');
    
    return eval(Name);
}
    
    exports.tt = tt;
}(window))

console.log(tt('User'));

JavaScript

function Class(name, o, parent) {
    var valid = new RegExp("^[a-zA-Z_\$][a-zA-Z0-9_\$]+$"), classy;
    
    if (!valid.test(name))
        throw new TypeError('The first parameter must be a valid Function name');
    
    eval('function '+name+'(o){_.assign(this,o || {});}');
    eval('classy = '+name+';');
    
    function extend(parent) {
        this.prototype = parent.prototype;
        return this;
    };
    
    classy.prototype.extend = extend.bind(classy);
    
    if (parent) {
        extend.call(classy, parent);
    }
    
    return eval('new '+name+'(o)');
}


var Person = Class('Person', {
    data: [],
    add: function(p) {
        this.data.push(p);
        return this;
    }
});

console.log(Person.add({a:1}));

var User = Class('User', Person);