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

相关推荐
勤自省18 分钟前
ROS2从入门到“重启解决”:21讲8~12章踩坑血泪史与核心总结
linux·开发语言·ubuntu·ssh·ros
TIEM_6922 分钟前
C++string|遍历、模拟实现、赋值拷贝现代写法
开发语言·c++
计算机安禾28 分钟前
【c++面向对象编程】第14篇:多态(一):虚函数——实现“一个接口,多种方法”
开发语言·c++
tellmewhoisi31 分钟前
单独抽取用户服务(请求不通):feign添加拦截器(添加token)
java·开发语言
ZC跨境爬虫33 分钟前
跟着MDN学HTML_day_45:(EventTarget接口)
前端·javascript·ui·html·媒体
basketball61644 分钟前
C++ Lambda 表达式完全指南
开发语言·c++·算法
不知名的老吴1 小时前
C++中emplace函数的不适场景总结(三)
开发语言·c++·算法
漂移的电子1 小时前
【el-tree】外层多选,某个属性内层单选
前端·javascript·vue.js
Java面试题总结1 小时前
Go 里什么时候可以“panic”?
开发语言·后端·golang
rit84324991 小时前
基于MATLAB平台的指纹识别系统实现
开发语言·matlab