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