function Class($, o) { if (!o) [$, o] = [Function, $] let f = function(...a){ this.class = f return f.new.apply(this, a) } let p = f.prototype f.__proto__ = $, p.__proto__ = $ && $.prototype || null Object.keys(o).forEach(k => { let v = o[k], t = k[0] == '$' ? p : f if (t == p) k = k.slice(1) t[k] = (typeof v=='function') ? v.toMethod(t, k) : v }) return f }