MDN上是这么介绍new运算符的:new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一。

这里,我们探究的是new运算符实际上做了什么?

var a = new A();
复制代码

当这段代码运行的时候,内部实际上执行的是:

// 1. 首先创建一个空对象
var o = new Object();
// 2. 将空对象的原型赋值为构造器函数的原型
o.__proto__ = A.prototype;
// 3. 更改构造器函数内部this,将其指向新创建的空对象
A.call(o);
复制代码

最后当然是返回了。返回的时候会进行一个判断,如果构造器函数(这里即A)设置了返回值,并且返回值是一个Object类型的话,就直接返回该Object,否则返回新创建的空对象(这里即o);

function A(name){this.name = name;return {age: 12}
}
var a = new A('tom');
console.dir(a);
/*
Objectage:12__proto__:Object
*/复制代码

转载于:https://juejin.im/post/5a379d78f265da43305e91bd

js new 运算符到底做了什么?相关推荐

  1. node.js是用来做什么的?

    Node.js是一个基于Chrome V8引擎的JavaScript运行环境.Node对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好. 我们都知道计算机处理器智能识别机器 ...

  2. 一个菜鸟的暑期到底做了些什么

    一个菜鸟的暑期都做了些什么 linux虚拟机的搭建 PhotoShop的学习 暑期主攻:Web前端 总结 linux虚拟机的搭建 先从最简单的开始说起,依据网上的流程以及学长的帮助,搭建好了虚拟机,但 ...

  3. js中‘0’到底是 true 还是 false

    js中'0'到底是 true 还是 false   if ('0') alert("'0' is true");   if ('0' == false) alert("' ...

  4. volatile关键字到底做了什么?

    话不多说,直接贴代码 class Singleton {private static volatile Singleton instance;private Singleton(){}//双重判空pu ...

  5. 忠于职守 —— sysmon 线程到底做了什么?(九)

    在 runtime.main() 函数中,执行 runtime_init() 前,会启动一个 sysmon 的监控线程,执行后台监控任务: systemstack(func() { // 创建监控线程 ...

  6. Angular 开发里的 polyfills.js、runtime.js、styles.js 和 vendor.js 是用来做什么的

    what is main.js and main.js.map? and other stuff 问题 chunk {main} main.js, main.js.map (main) 24.5 kB ...

  7. 利用js的闭包原理做对象封装及调用方法

    创建一个js文件,名为testClosure.js: ? 1 2 3 4 5 6 7 8 9 (function () {   function a()   {     alert('i am a') ...

  8. http.ListenAndServe()到底做了什么?

    参考:https://studygolang.com/articles/25849?fr=sidebar ​ http://blog.csdn.net/gophers 实现一个最简短的hello wo ...

  9. ad中电容用什么封装_二极管在电路中到底做什么用的

    所有的电子电路中基本上都会用到二极管,它的特性也是非常之多,最主要就是单方向导电性,(单向导电性的两根引脚之间的电阻分为正向电阻和反向电阻两种).人们利用这些不同特性构成各种具体的应用电路,分析不同电 ...

最新文章

  1. 211高校副校长:我发了170多篇论文,最满意的一篇不到2分
  2. excel相乘再相加_excel将两组数据相乘后再求和该怎么操作?
  3. MongoDB同步到Oracle,MongoToOracleMongoDB数据库迁移工具
  4. vimrc-20201028重新配置
  5. 使用Python和OpenCV创建自己的“ CamScanner”
  6. Azure Virtual Network, 虚拟网络
  7. 软件测试知识产权保护,一种软件测试方法及软件测试系统专利_专利申请于2017-09-07_专利查询 - 天眼查...
  8. 两台电脑usb直连传数据_如何通过一根USB数据线把手机/平板充当电脑的第二个显示器...
  9. 包含图片,复选框的ListView(转)
  10. Android跳转到拨打电话的页面
  11. vb子程序未定义怎么改怎么办_vb中总提示子程序或函数未定义
  12. curl模拟http请求
  13. 快速掌握用python写并行程序设计_Python中的并行编程速度
  14. 《凤凰项目-一个IT运维从传奇故事》读后感+个人职业思考
  15. 乖离性暗机器人_乖离性百万亚瑟王超弩级暗机器人复刻攻略分享
  16. matlab泊松分布实现
  17. python 网页截图不全_Selenium webdriver 截图 太长截不全的问题
  18. python 基因测序_使用机器学习和Python揭开DNA测序神秘面纱
  19. java 代码块 构造函数_Java学习笔记之------构造函数,静态关键字,静态代码块,构造代...
  20. 黑客防线 2007~2012 NPM、PYPI、DockerHub 备份

热门文章

  1. mysql的表空间是否自动扩展_Oracle修改指定表空间为自动扩展
  2. html表格上下移动,Vue实现table上下移动功能示例
  3. kde重启_在Linux系统中出现KDE Plasma面板崩溃问题的解决方法
  4. mvc mvp mvvm的区别与联系_MVC,MVP,MVVM比较以及区别(上)
  5. Java项目:在线婚纱摄影预定系统(java+javaweb+SSM+springboot+mysql)
  6. 网络设置计算机,怎么重置电脑网络设置
  7. 4块硬盘做raid几_HP-P4500存储RAID硬盘离线数据恢复案例
  8. JackJson 使用记录
  9. 微信小程序如何进行登录授权和获取用户信息
  10. u-charts 曲线图中间有部分没数据,导致点和点无法连成线的问题解决