function _new(fn, ...arg) {
//判断是否是构造函数
if (!Object.prototype.hasOwnProperty.call(fn, 'prototype')) {
throw TypeError("fn is not a constructor");
}
// 创建一个新的对象,继承fn 返回这个新对象;
const obj = Object.create(fn.prototype);
const result = fn.call(this, ...arg);
// 判断构造函数是否有返回对象,如果返回对象的话new就返回那个对象result,否则返回新创建的obj
return result instanceof Object ? result : obj;
}
let c = _new(Foo, "Foo");
console.log(c, "Foo");