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