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