广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript中new操作符的原理示例详解
  • 370
分享到

JavaScript中new操作符的原理示例详解

2024-04-02 19:04:59 370人浏览 八月长安
摘要

new的用处 new的作用是通过构造函数来创建一个实例对象,该实例与原型和构造函数之间的关系如下图所示: 先来总结一下 创建一个空对象 空对象的内部属性 __pr

new的用处

new的作用是通过构造函数来创建一个实例对象,该实例与原型和构造函数之间的关系如下图所示:

先来总结一下

  1. 创建一个空对象
  2. 空对象的内部属性 __proto__ 赋值为构造函数的 prototype 属性
  3. 将构造函数的 this 指向空对象
  4. 执行构造函数内部代码
  5. 返回该新对象

详细说明

执行 new 操作时会依次经过以下步骤:

1、创建一个空对象

  • 空对象是 Object 的实例,即 {} 。

let obj = {}

2、空对象的内部属性 __proto__ 赋值为构造函数的 prototype 属性

  • 该操作是为了将空对象链接到正确的原型上去

function Foo(num) {
  this.number = num
}

obj.__proto__ = Foo.prototype

3、将构造函数的 this 指向空对象

  • 即构造函数内部的 this 被赋值为空对象,以便后面正确执行构造函数。

Foo.call(obj, 1)

4、执行构造函数内部代码

  • 即给空对象添加属性、方法。

5、返回该新对象

  • 如果构造函数内部通过 return 语句返回了一个引用类型值,则 new 操作最终返回这个引用类型值;否则返回刚创建的新对象。
  • 引用类型值:除基本类型值(数值、字符串、布尔值、null、undefined、Symbol 值)以外的所有值。

模拟 new 操作符

下面的 myNew 函数模拟了 new 操作符的行为


function myNew(func, ...args) {
  let obj = {}
  obj.__proto__ = func.prototype
  let res = func.apply(obj, args)
  return res instanceof Object ? res : obj
}

function Foo(num) {
  this.number = num
}

let foo1 = myNew(Foo, 1)
console.log(foo1 instanceof Foo)  // true
console.log(foo1.number)  // 1

let foo2 = new Foo(2)
console.log(foo2 instanceof Foo)  // true
console.log(foo2.number)  // 2

上面通过 instanceof 操作符来判断构造函数的返回值是否为 Object 的实例,即是否为引用类型值;这是因为所有引用类型值都是 Object 的实例,Object 是所有引用类型值的基类型。

好了,到此这篇关于javascript中new操作符原理的文章就介绍到这了,更多相关js new操作符原理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaScript中new操作符的原理示例详解

本文链接: https://www.lsjlt.com/news/130342.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中new操作符的原理示例详解
    new的用处 new的作用是通过构造函数来创建一个实例对象,该实例与原型和构造函数之间的关系如下图所示: 先来总结一下 创建一个空对象 空对象的内部属性 __pr...
    99+
    2022-11-12
  • JavaScript中new操作符的原理与实现详解
    目录一、new做了哪些事二、返回不同类型时有哪些表现三、手写new的实现原理一、new做了哪些事 先看看new的使用场景: // 1、创建一个构造函数 function Vehicl...
    99+
    2022-11-13
    JavaScript new操作符 JavaScript new
  • JavaScript中new操作符的作用是什么
    这篇文章给大家介绍JavaScript中new操作符的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JavaScript的特点1.JavaScript主要用来向HTML页面添加交互行为。2.JavaScrip...
    99+
    2023-06-06
  • JavaScript中的new操作符的具体使用
    JavaScript中的new操作符是一个非常重要的概念,它可以让我们创建一个自定义的对象类型或者一个内置的对象类型,比如Array、Date、Function等。那么,new操作符...
    99+
    2023-05-18
    JavaScript new操作符 js new运算符
  • React Fiber 链表操作及原理示例详解
    目录正文什么是FiberFiber节点React源码Fiber树是链表节点独立节省操作时间与单向操作利于双缓存与异步可中断更新操作异步可中断更新双缓存正文 看了React源码之后相信...
    99+
    2022-11-13
    React Fiber 链表操作 React Fiber
  • JavaIO字符操作和对象操作示例详解
    目录字符操作编码与解码String 的编码方式Reader 与 Writer实现逐行输出文本文件的内容对象操作序列化Serializabletransient字符操作 编码与解码 ...
    99+
    2023-02-05
    JavaIO字符操作对象操作 Java IO
  • JS new操作原理及手写函数模拟实现示例
    目录引言原理手写函数模拟 newv1 基本实现v2 考虑参数类型v3 Object.prototype.__proto__ 的替代方案v4 使用 ES6 语法实现v5 考虑 ES6 ...
    99+
    2022-11-13
  • GO的锁和原子操作的示例详解
    目录GO的锁和原子操作分享锁是什么锁是用来做什么的互斥锁互斥锁 - 解决问题读写锁我们先来写一个读写锁的DEMO自旋锁和互斥锁的区别如何选择锁啥是原子操作总结GO的锁和原子操作分享 ...
    99+
    2023-02-24
    GO锁 原子操作 GO锁 GO 原子操作
  • JavaScript展开操作符的示例分析
    这篇文章主要介绍JavaScript展开操作符的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!你可以通过展开操作符(Spread operator)...扩展一个数组对象和字...
    99+
    2022-10-19
  • Javascript中字符串和数字的操作示例
    小编给大家分享一下Javascript中字符串和数字的操作示例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1、length – 返回字符串的长度‘abcd'.length;&nb...
    99+
    2022-10-19
  • 详解JavaScript中常用操作符的使用
    目录1、可选链操作符(optional chaining operator)2、空值合并操作符(nullish coalescing operator)3、箭头函数(Arrow Fu...
    99+
    2023-05-17
    JavaScript操作符使用 JavaScript操作符
  • JavaScript中强大的操作符使用详解
    目录一、一元操作符1. 递增和递减操作符(++ --)2. 加和减操作符二、位操作符1. 按位与操作符(&)2. 按位或操作符(|)3. 按位非操作符 (~)4. 按位异或运...
    99+
    2022-11-13
  • Rust 中的文件操作示例详解
    目录文件路径文件创建和删除目录创建和删除文件创建和删除文件读取和写入文件打开文件读取文件写入相关资料文件路径 想要打开或者创建一个文件,首先要指定文件的路径。 Rust 中的路径操作...
    99+
    2022-11-12
  • MySQL数据操作管理示例详解
    目录一、查看表和查看表的定义二、删除表三、创建表四、表类型五、修改表六、完整性1、数据完整性2、使用约束实现数据完整性3、在数据表上添加约束4、删除约束七、添加数据八、修改数据九、删除数据十、SQL语句中的运算符算数运算...
    99+
    2022-09-23
  • Java操作Excel的示例详解
    目录使用场景excel 03 和 07的区别POIeasyExcel解析excel表中的对象POI使用步骤POI 写数据POI 读数据计算公式easyExcel读写数据写数据读数据j...
    99+
    2023-01-10
    Java操作Excel方法 Java操作Excel Java Excel
  • JavaScript中的FileReader示例详解
    目录前言:input:fileFileReader补充:一个比较全面的例子总结前言: FileReader是一种异步文件读取机制,结合input:file可以很方便的读取本地文件。 ...
    99+
    2022-11-13
  • Java API操作Hdfs的示例详解
    目录1.遍历当前目录下所有文件与文件夹2.遍历所有文件3.创建文件夹4.删除文件夹5.上传文件6.下载文件1.遍历当前目录下所有文件与文件夹 可以使用listStatus方法实现上述...
    99+
    2022-11-13
  • Javascript中的堆、栈操作示例
    这篇文章将为大家详细讲解有关Javascript中的堆、栈操作示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。堆、栈都是一种数据项按序排列的数据结构,它涉及到数据在内存中的存储方式,Javascript...
    99+
    2023-06-14
  • Java中字符串String的+和+=及循环操作String原理详解
    String对象是不可变的:意思就是无论是对String的新增或修改,出现一个全新的String内容时,都意味着诞生了一个新的对象。但是如果内容不变的话,增加的只是对象的引用而已。 ...
    99+
    2023-01-30
    java string字符串 java拼接字符串 java中的String
  • Python中的连接符(+、+=)示例详解
    前言 本文通过在一段示例代码中发现的问题,来给大家详细介绍了Python中的连接符(+、+=),下面话不多说,来看详细的介绍吧。 假设有下面一段代码: a = [1, 2, 3, 4] b = [5, ...
    99+
    2022-06-04
    示例 详解 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作