// new的 原理
/*
1、创建一个新对象
2、将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象)
3、执行构造函数中的代码(为这个新对象添加属性)
4、判断类型,返回新对象(有可能是array,object,function)
*/
function newFn (fn, ...args) {
let obj = {}
obj.__proto__ = fn.prototype
let reuslt = fn.call(obj, args) //
return typeof reuslt === 'object' ? reuslt : obj;
}