专栏首页Web前端开发new 运算符的原理

new 运算符的原理

关于 new 运算符的原理:

1、红宝书上解释:

(1)创建一个新对象

(2)将构造函数的作用域赋给新对象

(3)执行构造函数中的代码

(4)返回新对象

2、MDN上的解释:

(1)一个继承自 Foo.prototype 的新对象被创建

(2)使用指定的参数调用构造函数 Foo,并将 this 绑定到新创建的对象。new Foo 等同于 new Foo(),也就是没有指定参数时,Foo 不带任何参数调用的情况

(3)如果构造函数返回了一个“对象”,那么这个对象会取代整个 new 出来的结果。如果构造函数没有返回对象,那么 new 出来的结果为步骤(1)创建的对象

3、总结:

使用 new 运算符时,其实就做了这三件事:

// 创建了一个空对象 obj,并将这个空对象的__proto__成员指向 Foo 函数对象 prototype 成员对象
var obj  = {};
obj.__proto__ = Foo.prototype;

// 将 Foo 函数对象的 this 指针替换成 obj,然后再调用Foo函数
Foo.call(obj);

// 判断实例类型是否为对象,是则返回实例,否则返回构造函数
if (typeof obj === 'object') {
    return obj;
} else {
    return Foo;
}

也就是说,函数内部发生了以下变化:

(1)创建一个新对象,并继承构造函数 Foo 的原型对象 Foo.prototype

(2)构造函数 Foo 被执行,执行时传入相应的参数,并将 this 指定为新的实例

(3)判断实例是否为对象,是则返回实例,否则返回构造函数

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Vue移动组件库Mint UI的安装与使用

    更多 MintUI 组件请参考 http://mint-ui.github.io/docs/#/zh-cn2/repositories

    Leophen
  • JavaScript面向对象之对象的声明、遍历和存储

    Leophen
  • React中的State与Props

    一个组件的显示形态可以由数据状态和外部参数决定,其中,数据状态为 state,外部参数为 props

    Leophen
  • 文本特征提取方法研究

    一、课题背景概述 文本挖掘是一门交叉性学科,涉及数据挖掘、机器学习、模式识别、人工智能、统计学、计算机语言学、计算机网络技术、信息学等多个领域。文本挖掘就是从大...

    机器学习AI算法工程
  • 【陆勤学习】文本特征提取方法研究

    一、课题背景概述 文本挖掘是一门交叉性学科,涉及数据挖掘、机器学习、模式识别、人工智能、统计学、计算机语言学、计算机网络技术、信息学等多个领域。文本挖掘就是从大...

    陆勤_数据人网
  • Shell脚本循环读取文件中的每一行

    While循环中read命令从标准输入中读取一行,并将内容保存到变量line中。在这里,-r选项保证读入的内容是原始的内容,意味着反斜杠转义的行为不会发生。输入...

    卡尔曼和玻尔兹曼谁曼
  • 知识图谱技术分享会----有关知识图谱构建的部分关键技术简介及思考

    昨天在北理工参加了一场由 雪晴数据网和北京理工大学大数据创新学习中心联合举办的知识图谱分享活动,聆听了一下午报告,可谓是受益匪浅。一下午时间安排的非常饱满,总共...

    用户1539362
  • 『高级篇』docker之Mesos微服务部署(26)

    PS:基本的mesos和marathon讲述完成了,因为主机内存后面的结果没有演示但是基本的命令和镜像有了后面基本是,基本操作啦!下次一起学学docker sw...

    IT故事会
  • Go 每日一库之 sqlc

    在 Go 语言中编写数据库操作代码真的非常痛苦!database/sql标准库提供的都是比较底层的接口。我们需要编写大量重复的代码。大量的模板代码不仅写起来烦,...

    用户7731323
  • 如何生成KeyStore

    介绍如何生成keystore cmd下: 进入到jdk的bin目录,这样的话,android.keystore文件就会生成在这个目录下,签名的时候我们需要这...

    用户5640963

扫码关注云+社区

领取腾讯云代金券