1. /**
    2. * new关键字的功能
    3. * 1.创建一个新对象
    4. * 2.让实例可以访问到私有属性
    5. * 3.让实例可以访问构造函数原型上的属性
    6. * 4.判断构造函数的返回值是否是引用类型
    7. */
    8. function MyNew(ctor,...args){
    9. let obj = new Object()
    10. obj.__proto__ = Object.create(ctor.prototype);
    11. let res = ctor.apply(obj, args)
    12. return typeof res === 'object' ? res : obj;
    13. }
    14. function Person(name){
    15. this.name = name
    16. }
    17. Person.prototype.age = 18
    18. Person.prototype.sayHi = function(){
    19. console.log(this.name);
    20. }
    21. const p = MyNew(Person,'隔壁老王')
    22. console.log(p.age,p.name);
    23. p.sayHi()