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 肯定不止这一种方法,当你了解了,可以用其它方法试着写一下

  

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

上一篇:SQL Server 跨服务器快速数据转移


下一篇:刷书《从0到1》第一章之文件上传