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

相关推荐
2501_941111865 分钟前
C++模块化设计原则
开发语言·c++·算法
G***66915 分钟前
前端性能优化插件,CSS与JavaScript压缩插件实战指南
前端·javascript·css
2501_9412375315 分钟前
基于C++的游戏引擎开发
开发语言·c++·算法
枫叶丹424 分钟前
【Qt开发】Qt窗口(二) -> QToolBar工具栏
开发语言·数据库·c++·qt
熙客33 分钟前
Java集合框架概述
java·开发语言
鹏多多38 分钟前
React的useRef的深度解析与应用指南
前端·javascript·react.js
我命由我1234543 分钟前
Java 开发 - 简单消息队列实现、主题消息队列实现
java·开发语言·后端·算法·java-ee·消息队列·intellij-idea
chilavert31844 分钟前
技术演进中的开发沉思-194 JavaScript: Prototype 框架
开发语言·javascript·原型模式
2501_9412374544 分钟前
高性能计算通信库
开发语言·c++·算法
杜子不疼.1 小时前
【C++】红黑树为什么比AVL快?用C++亲手实现告诉你答案
开发语言·c++