我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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操作符原理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

JavaScript中new操作符的原理与实现详解

你知道new吗?你知道new的实现原理吗?你能手写new方法吗?不要担心,这篇文件就来带大家深入了解一下JavaScript中的new操作符,感兴趣的小伙伴可以学习一下
2022-11-13

JavaScript中new操作符的作用是什么

这篇文章给大家介绍JavaScript中new操作符的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JavaScript的特点1.JavaScript主要用来向HTML页面添加交互行为。2.JavaScrip
2023-06-06

JavaScript中的new操作符的具体使用

本文主要介绍了JavaScript中的new操作符的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-18

React Fiber 链表操作及原理示例详解

这篇文章主要为大家介绍了React Fiber 链表操作原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

JavaIO字符操作和对象操作示例详解

这篇文章主要为大家介绍了JavaIO字符操作和对象操作示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-05

GO的锁和原子操作的示例详解

这篇文章主要为大家详细介绍了Go语言中锁和原子操作的相关资料,文中的示例代码讲解详细,对我们学习Go语言有一定的帮助,需要的可以参考一下
2023-02-24

详解JavaScript中常用操作符的使用

在JavaScript中,有一些操作符可以使代码更简洁、易读和高效。这篇文章为大家整理了11个JavaScript中常用操作符的使用,需要的可以参考一下
2023-05-17

Javascript中的堆、栈操作示例

这篇文章将为大家详细讲解有关Javascript中的堆、栈操作示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。堆、栈都是一种数据项按序排列的数据结构,它涉及到数据在内存中的存储方式,Javascript
2023-06-14

Java操作Excel的示例详解

在平时可以使用IO流对Excle进行操作,但是现在使用更加方便的第三方组件来实现。本文就来和大家聊聊Java如何通过第三方组件实现操作Excel,需要的可以参考一下
2023-01-10

Java中字符串String的+和+=及循环操作String原理详解

Java编译器在编译时对String的+和+=操作会创建StringBuilder对象来进行字符串的拼接,下面这篇文章主要给大家介绍了关于Java中字符串String的+和+=及循环操作String原理的相关资料,需要的朋友可以参考下
2023-01-30

mysql中in操作符的示例分析

这篇文章给大家分享的是有关mysql中in操作符的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在之前学习其他模块的时候,我们接触到了in操作符,不过在mysql数据库中很多人就不知道怎么运用了。我们今天
2023-06-14

编程热搜

目录