new操作符的实现原理

new操作符的执行过程:

(1)首先创建了一个新的空对象

(2)设置原型,将对象的原型设置为函数的 prototype 对象。

(3)让函数的 this 指向这个对象,执行构造函数的代码(为这个新对象添加属性)

(4)判断函数的返回值类型,如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类型的对象。

具体实现:

function objectFactory() {
  let newObject = null;
  let constructor = Array.prototype.shift.call(arguments);
  let result = null;
  // 判断参数是否是一个函数
  if (typeof constructor !== "function") {
    console.error("type error");
    return;
  }
  // 新建一个空对象,对象的原型为构造函数的 prototype 对象
  newObject = Object.create(constructor.prototype);
  // 将 this 指向新建对象,并执行函数
  result = constructor.apply(newObject, arguments);
  // 判断返回对象
  let flag = result && (typeof result === "object" || typeof result === "function");
  // 判断返回结果
  return flag ? result : newObject;
}
// 使用方法
objectFactory(构造函数, 初始化参数);

new操作符的执行过程相关推荐

  1. elasticsearch控制match执行过程的低级查询处理规则

    本篇文章主要说明match执行过程中的低级查询(bool term)以及涉及到评分规则(包括同义词).elasticsearch一些较复杂业 务查询中 match 多词和同义词搜索可能会遇到的问题. ...

  2. MySQL语句执行过程

    目录 前言 MySQL语句执行过程 一.连接器 二.查询缓存 三.分析器 四.优化器 1.逻辑查询优化 1.1 逻辑查询优化思路. 2.2 查询重写规则 2.3 启发式规则再逻辑优化阶段的应用 2.3 ...

  3. MyBatis核心源码剖析(SqlSession XML解析 Mapper executor SQL执行过程 自定义类型处理器 缓存 日志)

    MyBatis核心源码剖析 MyBatis核心源码剖析 1 MyBatis源码概述 1.1 为什么要看MyBatis框架的源码 1.2 如何深入学习MyBatis源码 1.3 源码分析的5大原则 2 ...

  4. SQL执行过程中的性能负载点

    一.SQL执行过程 1.用户连接数据库,执行SQL语句: 2.先在内存进行内存读,找到了所需数据就直接交给用户工作空间: 3.内存读失败,也就说在内存中没找到支持SQL所需数据,就进行物理读,也就是到 ...

  5. python 二进制流转图片_Python零基础入门到精通-5.1节:Python程序的执行过程

    教程引言: 系统地讲解计算机基础知识,Python的基础知识, 高级知识,web开发框架,爬虫开发,数据结构与算法,nginx, 系统架构.一步步地帮助你从入门到就业. 5.1.1 在命令行中执行Py ...

  6. JSP的执行过程(详解)

    要了解JSP的执行过程,首要要搞懂什么是JSP,JSP的全称是Java Server Pages,里面包含html标签.css样式.JavaScript脚本和Java代码. 下面我们来说说JSP的执行 ...

  7. oracle 与 client端执行结果不一致_不同模式下Spark应用的执行过程

    根据应用执行的3个阶段,不同执行模式下各个阶段的执行逻辑不相同,本文分析不同模式下的执行逻辑. Yarn-Client模式的执行流程 Yarn的组成 Yarn是hadoop自带的资源管理框架,它的设计 ...

  8. Sql Server 因为触发器问题导致数据库更新报错“在触发器执行过程中引发了错误,批处理已中止”的问题处理...

    在维护一个非常旧的项目时,由于该项目版本已经非常老了,而且在客户现场运行的非常稳定,更要命的是本人目前没有找到该项目的代码,为了处理一个新的需求而且还不能修改程序代码,于是决定从数据库入手,毕竟该项目 ...

  9. saiku执行过程代码跟踪

    使用了很久的saiku,决定跟踪一下代码,看看它的执行核心过程: 一.入口controller代码 1.1.页面打开之后,会发送一个ajax请求 Request URL: http://l-tdata ...

最新文章

  1. 《中国人工智能ABC人才发展报告》发布,算法和应用类人才短缺
  2. 计算机视觉深度学习顶会_顶会论文接收量再破纪录,计算机视觉创新正在发生什么变化?丨 CVPR 2019分享会...
  3. QT关于全局变量的申请以及使用,所有class可用同一个变量
  4. jzoj3913-艰难的选择【差分,统计】
  5. python3经典实例_Python3十大经典错误及解决办法
  6. bettertouchtool闪退_BetterTouchTool for Mac 3.238 无闪退 触控板增强工具
  7. MyBatis四大核心概念
  8. 真正优秀的人,都有这3种习惯
  9. asp.net gridview 模板列 弹出窗口编辑_Mac桌面多窗口整理工具Moom,使用教程
  10. 5、手把手教React Native实战之盒子模型BoxApp
  11. plesk 打不开php,如何在 Plesk 中管理 PHP
  12. python 把当前目录文件夹中的所有图片缩放为640*480
  13. Oracle日期函数和转换函数
  14. 董卫凤:不服输的华丽转身(三)
  15. 肖 sir_就业课__005项目数据
  16. 浅谈 ext2 文件系统的特点、优缺点以及使用场景
  17. 知乎里面别人发的视频怎么保存下来?
  18. 【推荐系统论文精读系列】(五)--Neural Collaborative Filtering
  19. 二手图书交易网站-图书发布图书购买评价购物车-计算机毕业设计基于javaWebSSMspringboot框架idea开发工具asp.net和PHP
  20. Scrapy CrawlSpider介绍和使用

热门文章

  1. 咖说 | 揭秘佳士得首次拍卖的区块链艺术品Portraits of a Mind
  2. linux擦除nandflash分区,【Linux公开课】NAND Flash存储器分区、烧写流程图、格式化NAND Flash...
  3. flush privileges 什么意思?
  4. 西交计算机专业课,20双非跨考上岸西交计算机(912)
  5. Codeforces 912 D. Fishes (贪心、bfs)
  6. 如何设计一个PC客户端的架构
  7. 各种浏览器全屏模式的方法、属性和事件介绍
  8. 自动挡驾照后上路学习总结
  9. fortran中如何提供计算程序运行时间?
  10. 读后感:写给人生的九封信,愿你的人生淡定从容,繁华似锦