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。

相关推荐
纪念 2294 分钟前
c++ string(二)
开发语言·c++
李福春9 分钟前
斗破Google ADK Java苍穹-第5境斗灵-凝物通脉-Context与State
java·开发语言·人工智能·java-ee·google adk·深圳同盟·腾讯云架构师技术同盟
十年Java程序媛10 分钟前
Java 接口和抽象类对比|抛弃老旧八股,正确选型
java·开发语言·spring boot·后端
见叶之秋12 分钟前
【C++】从基类到派生类:关于C++继承的务实梳理
开发语言·c++
kyle~19 分钟前
C++ 智能指针:RAII、所有权与对象生命周期
开发语言·c++
y1su23 分钟前
Leetcode 单调栈模板
java·开发语言·数据结构·算法·leetcode
2601_9628857229 分钟前
如何用 Python 计算索提诺比率和卡玛比率?
开发语言·python
Hilaku32 分钟前
为什么我劝应届生不要去创业公司写前端?
前端·javascript·程序员
郑州光合科技余经理35 分钟前
出海外卖平台:支付对接为什么要和下单收款分开
android·java·开发语言·前端·后端·php·ai编程
kimnoic42 分钟前
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
开发语言·python