function newX(Fn, ...args) {
let obj = Object.create(Fn.prototype) // 步骤1、2
let ret = Fn.apply(obj, args) // 步骤3
return ret instanceof Object ? ret : obj // 步骤4
}
// new干了啥?
// 1、创建一个临时对象instance
// 2、维护原型链,instance.__proto__ = Func.prototype
// 3、Fn中的this指向instance,执行Fn
// 4、返回一个对象,如果显式的return一个变量,判断变量类型
// 如果是值类型,会返回这个临时对象instance;
// 函数不写默认返回undefined,undefined是值类型所以返回临时对象instance)