描述过程
1.创建一个js对象
2.这个对象的_proto_要指向构造函数的原型prototype
3.将这个对象作为this的上下文
4.如果这个函数没有返回对象,则返回this
代码实现
function myNew(fn, ...args) {
let instance = Object.create(fn.prototype);// 1、2步
let res = fn.apply(instance, args); // 改变this指向
return typeof res === 'object' ? res: instance; // 确保返回的是一个对象
}
关于返回值
在new的时候,会对构造函数的返回值做判断:
1、如果返回值是基础数据类型,则忽略返回值;
2、如果返回值是引用数据类型,则使用return 这个返回值。