要知道new操作符的作用是什么,得先知道它干了什么事(原理):
- 它创建了一个新对象
- 它将构造函数的原型属性和方法挂载到新对象的__proto__(原型指针)上
- 他执行了构造函数并将构造函数的this指向了新对象
- 将这个新对象返回出来了
知道了这些后,那么就很明白了new操作符的作用,我们可以利用call或者apply来封装一个属于自己的new 函数:
//第一个参数为构造函数,后面为参数
function myNew() {
//创建空对象
var obj = {};
//获取参数
var [Fn, ...arg] = [...arguments]
//将原型属性方法挂载到对象的指针(__proto__)
obj.__proto__ = Fn.prototype;
//执行构造函数
Fn.apply(obj, arg)
//返回新对象
return obj
}