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

相关推荐
SVIP1115910 小时前
即时通讯WebSocket详解及使用方法
前端·javascript
松涛和鸣11 小时前
22、双向链表作业实现与GDB调试实战
c语言·开发语言·网络·数据结构·链表·排序算法
mCell14 小时前
使用 useSearchParams 同步 URL 和查询参数
前端·javascript·react.js
mCell15 小时前
前端路由详解:Hash vs History
前端·javascript·vue-router
海上彼尚15 小时前
无需绑卡的海外地图
前端·javascript·vue.js·node.js
1024肥宅16 小时前
手写 call、apply、bind 的实现
前端·javascript·ecmascript 6
xlq2232216 小时前
22.多态(上)
开发语言·c++·算法
666HZ66617 小时前
C语言——高精度加法
c语言·开发语言·算法
科杰智能制造17 小时前
纯前端html、js实现人脸检测和表情检测,可直接在浏览器使用
前端·javascript·html
星释17 小时前
Rust 练习册 100:音乐音阶生成器
开发语言·后端·rust