当前位置: 首页 > article >正文

js中new操作符具体都干了什么?

在JavaScript中,new操作符是一个用于创建对象实例的关键字,它背后的机制相当复杂,但以下是它执行的主要步骤:

new操作符的工作原理:

  1. 创建一个全新的空对象:首先,JavaScript会创建一个全新的对象,这个对象没有原型([[Prototype]]属性为null)。

  2. 将这个空对象的原型设置为构造函数的prototype属性:然后,这个新对象的[[Prototype]]属性会被设置为构造函数的prototype属性。这意味着新对象可以访问构造函数原型上的所有方法和属性。

  3. 绑定this到新对象:接下来,构造函数被调用,this关键字被绑定到新创建的对象上。这意味着在构造函数内部声明的所有属性和方法都会成为新对象的属性。

  4. 执行构造函数的代码:构造函数内部会执行一些代码,可能包括为this添加新的属性和方法。

  5. 返回这个新对象:如果构造函数没有显式地返回一个对象,那么new表达式会返回步骤1中创建的新对象。

详细的步骤:

  • 步骤 1let obj = {};

  • 步骤 2obj.__proto__ = Constructor.prototype;

  • 步骤 3Constructor.call(obj, arguments...);(这里的arguments...代表构造函数的参数)

  • 步骤 4:检查构造函数返回的结果:

    • 如果构造函数返回了一个对象,那么new操作符会返回这个对象。
    • 如果构造函数没有返回对象,或者返回的是一个基本数据类型(如数字、字符串、布尔值),那么new操作符会返回步骤1中创建的对象。

示例:

function Person(name, age) {
  this.name = name;
  this.age = age;
}

var person1 = new Person('Alice', 25);

// person1 是一个新的对象
// person1 的 [[Prototype]] 指向 Person.prototype
// Person.prototype 上的方法如 toString() 可以被 person1 调用
// 构造函数 Person 被调用,this 指向 person1,因此 person1 拥有 name 和 age 属性

在这个例子中,new操作符创建了person1对象,将Person.prototype设置为其原型,并调用Person构造函数来初始化person1的属性。如果Person构造函数返回了一个对象,那么new操作符会返回这个对象;如果没有返回,它就返回person1


http://www.kler.cn/a/405976.html

相关文章:

  • 【11.22更新】Win11 24H2正式版:26100.2454镜像一键获取!
  • 游戏陪玩系统开发功能需求分析
  • 葡萄酒(wine)数据集——LDA、贝叶斯判别分析
  • Nacos实现IP动态黑白名单过滤
  • 《操作系统》实验内容 实验二 编程实现进程(线程)同步和互斥(Python 与 PyQt5 实现)
  • fastify 连接 mysql
  • 为自动驾驶提供高分辨率卫星图像数据,实例级标注数据集OpenSatMap
  • 如何实现单片机的安全启动和安全固件更新
  • 达索系统亮相第三十一届中国汽车工程学会年会暨展览会
  • 【已完成】windows配置pytorch2.4.1深度学习环境
  • 商用密码应用安全性评估,密评整体方案,密评管理测评要求和指南,运维文档,软件项目安全设计相关文档合集(Word原件)
  • 玩转合宙Luat教程 基础篇④——程序基础(库、线程、定时器和订阅/发布)
  • c++ std::stack总结
  • 深入理解 prompt提示词 原理及使用技巧
  • ElasticSearch7.x入门教程之中文分词器 IK(二)
  • Python操作neo4j库py2neo使用之创建和查询(二)
  • ubuntu pytorch容器内安装gpu版本的ffmpeg
  • android studio无法下载,Could not GET xxx, Received status code 400
  • C++设计模式介绍
  • Bug:引入Feign后触发了2次、4次ContextRefreshedEvent
  • IDEA 下载源码很慢,Download Source使用阿里云镜像仓库
  • 算法编程题-排序
  • 什么是Web3D?有何优势?有哪些应用场景?
  • javascrip页面交互
  • 基于 MONAI 的 3D 图像分割任务1(数据增强可视化)
  • STL容器之priority_queue的常用功能和操作