首先我们常见很多new关键字的使用,比如声明Object、Array等、ES6中新增的Class构造函数,我们都需要使用new关键字对其进行操作。
下面围绕Class语法进行说明,整个过程主要分为四个步骤
- 首先构造一个新的对象{}
- 构造函数被执行
- 将构造函数的this指向新创建的对象
- 修改新创建对象的原型链
接下来尝试通过代码来简单模拟一下new的过程
//模拟函数
function mNew(func,...args){
//创建一个新对象
let obj = {};
//修改原型
obj.__proto__ = func.prototype;
//接下来修改this指向,执行构造函数
let newThisFunc = func.apply(obj,args);
//校验是否为一个对象
retrun typeof newThisFunc == 'object' ? newThisFunc : obj;
}
以上就是对这个问题的一些总结