function es5New(ctor) { let args = Array.prototype.slice.call(arguments, 1); let obj = {}; obj._proto_ = ctor.prototype; let result = ctor.apply(obj, args); return result instanceof Object ? result : obj; } function es6New(ctor, ...args) { let obj = Object.create(ctor.prototype); let result = ctor.apply(obj, args); return result instanceof Object ? result : obj; }