js new 原理

mdn new

new 调用函数时,该函数将被用作构造函数

类只能用 new 运算符实例化

不使用 new 调用一个类将抛出 TypeError。

过程

new Foo(...) 执行时:

  1. 创建一个空的简单 JavaScript 对象。

    为方便起见,我们称之为 newInstance。

  2. 如果构造函数的 prototype 属性是一个对象,则将 newInstance 的 [[Prototype]] 指向构造函数的这个属性;

    否则 newInstance 将保持为一个普通对象,其 [[Prototype]] 为 Object.prototype。

    备注:通过构造函数创建的所有实例都可以访问添加到构造函数 prototype 属性中的属性/对象。

  3. 使用给定参数执行构造函数,并将 newInstance 绑定为 this 的上下文,

    在构造函数中的所有 this 引用都指向 newInstance。

  4. 如果构造函数返回 引用类型,则该返回值作为 new 表达式的结果。

    否则返回构建好的 newInstance。

相关推荐
新*6 小时前
从一段 WebSocket 代码聊开:bytes 不是 zlib、binaryType 决定一切,15MB 大消息的零拷贝优化
javascript·python·websocket·性能优化·blob·zlib·arraybuffer
David猪大卫7 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
OpsEye7 小时前
别再挨个充会员了:多模型编码,最麻烦的从来不是选模型
javascript·ai编程
fengci.8 小时前
CTF2MISC中等部分
开发语言·前端·学习
学以智用9 小时前
jsencrypt.js 完整详解
javascript
xys_67810 小时前
JavaEE通关手册:初识Java
java·开发语言
ShineWinsu11 小时前
对于Qt:QTableWidget常见属性以及QTableWidgetItem类的解析
开发语言·c++·qt·gui·客户端·表格·qtablewidget
Hilaku11 小时前
你们公司有 35 岁以上的前端吗?
前端·javascript·程序员
鸿蒙开发12 小时前
小程序存档写到一半怎么办?双槽保存与损坏恢复实战
前端·javascript·react.js
ShineWinsu12 小时前
对于Qt:QListWidget常见属性以及QListWidgetItem类的解析
开发语言·c++·qt·客户端·列表·qlistwidget·qlistwidgetitem