1. /**
    2. * new 一个构造函数之后,在构造函数内部做了如下几件事
    3. * 1、创建一个Object实例
    4. * 2、改变原型链
    5. * 3、调用构造函数,并将它的this指向第一步创建的实例
    6. * 4、返回结果
    7. */
    8. function myNew() {
    9. const angs = [...arguments]
    10. // 1、创建一个实例
    11. const obj = new Object()
    12. // 2、改变实例原型链,实现继承
    13. const Con = angs.shift()
    14. obj.__proto__ = Con.prototype
    15. // 调用构造函数,并将内部this指向实例
    16. const ret = Con.aplly(obj, args)
    17. // 如果构造函数返回的结果是对象,则返回这个对象
    18. // 否则返回第一步创建的实例对象
    19. if (typeof ret === 'object') {
    20. return ret
    21. }
    22. return obj
    23. }