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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容