js中的new到底做了什么?如何手写一个new

描述过程

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 这个返回值。

你可能感兴趣的:(js中的new到底做了什么?如何手写一个new)