其他分享
首页 > 其他分享> > js new操作符做了些什么? 怎么去仿写一个new操作符?

js new操作符做了些什么? 怎么去仿写一个new操作符?

作者:互联网

// 假设你在学习之前了解 js面向对象

  function Student(name){
    this.name = name;
  }
  
  const stu = new Student("Tom");
  
  // 当我们通过构造函数 new 一个实例时都做了什么?
  1. 创建一个新对象
  2. 将新对象的 __proto__ 指向构造函数的 prototype //(所以实例可以使用构造函数上的属性和方法)
  3. 将构造函数的 this 指向这个新对象
  4. 返回新对象
  
  // 所以根据四个步骤我们可以仿写一个 new 
  function _new(fn, ...props){
    // 创建一个新对象
    const obj = {}; 
    // 将新对象的 __proto__ 指向构造函数的 prototype
    Object.setPrototypeOf(obj, fn.prototype); // 相当于 obj.__proto__ = fn.prototype, 但是不建议直接使用__proto__
    // 将构造函数的 this 指向这个新对象
    const newObj = fn.apply(obj, props);
    // 返回这个新对象
    return newObj === 'object' ? newObj : obj
  }
  
  const stu1 = _new(Student, "Tom")
  // 可以打印一下 stu 和 stu1 效果一样, 而且 Object.getPrototypeOf(stu) === Object.getPrototypeOf(stu1) 为 true; 
  // Object.getPrototypeOf(stu) 相当于 stu.__ptoto__
  
  // 仿写 new 肯定不止这一种方法,当你了解了,可以用其它方法试着写一下

  

标签:__,obj,仿写,const,stu,操作符,new,构造函数
来源: https://www.cnblogs.com/brotheryang/p/14596828.html