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

相关推荐
孞㐑¥2 分钟前
C语言—顺序表(含通讯录项目)
c语言·开发语言·经验分享·笔记
学地理的小胖砸6 分钟前
【高分系列卫星简介——高分五号卫星(GF-5)】
开发语言·python·信息可视化·遥感·地理信息
一颗星星辰7 分钟前
Python | 第六章节 | 控制结构
开发语言·网络·python
GoppViper12 分钟前
golang 如何生成唯一的 UUID
开发语言·后端·golang·uuid
SkyrimCitadelValinor12 分钟前
python【入门基础知识】
开发语言·python
Crossoads13 分钟前
【C++掌中宝】类和对象(一):类的定义和实例化
开发语言·c++·机器学习·ajax·数据挖掘
计算机学姐20 分钟前
基于php摄影门户网站
开发语言·vue.js·vscode·后端·php·phpstorm·webstorm
J不A秃V头A32 分钟前
Java中的继承和实现
java·开发语言
寂柒38 分钟前
C++——vector
开发语言·c++
Li小李同学Li39 分钟前
【C++11】线程库
开发语言·c++