function myNew(){
const args = [...arguments]
const parent = args.shift()
const o = new Object()
o.__proto__ = parent.prototype
// const o = Object.create(parent.prototype)
const ret = parent.apply(o, args)
// console.log(ret)
return typeof ret === 'object' ? ret : o
}
function foo(arg1){
this.name = arg1
}
function bar(arg1){
return { ab: arg1 }
}
const foo1 = myNew(foo, 2) // new foo(2)
const bar1 = myNew(bar, 3) //
console.log('foo1:', foo1)
console.log('bar1:', bar1)