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