new操作符的执行过程
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操作符的执行过程相关推荐
- elasticsearch控制match执行过程的低级查询处理规则
本篇文章主要说明match执行过程中的低级查询(bool term)以及涉及到评分规则(包括同义词).elasticsearch一些较复杂业 务查询中 match 多词和同义词搜索可能会遇到的问题. ...
- MySQL语句执行过程
目录 前言 MySQL语句执行过程 一.连接器 二.查询缓存 三.分析器 四.优化器 1.逻辑查询优化 1.1 逻辑查询优化思路. 2.2 查询重写规则 2.3 启发式规则再逻辑优化阶段的应用 2.3 ...
- MyBatis核心源码剖析(SqlSession XML解析 Mapper executor SQL执行过程 自定义类型处理器 缓存 日志)
MyBatis核心源码剖析 MyBatis核心源码剖析 1 MyBatis源码概述 1.1 为什么要看MyBatis框架的源码 1.2 如何深入学习MyBatis源码 1.3 源码分析的5大原则 2 ...
- SQL执行过程中的性能负载点
一.SQL执行过程 1.用户连接数据库,执行SQL语句: 2.先在内存进行内存读,找到了所需数据就直接交给用户工作空间: 3.内存读失败,也就说在内存中没找到支持SQL所需数据,就进行物理读,也就是到 ...
- python 二进制流转图片_Python零基础入门到精通-5.1节:Python程序的执行过程
教程引言: 系统地讲解计算机基础知识,Python的基础知识, 高级知识,web开发框架,爬虫开发,数据结构与算法,nginx, 系统架构.一步步地帮助你从入门到就业. 5.1.1 在命令行中执行Py ...
- JSP的执行过程(详解)
要了解JSP的执行过程,首要要搞懂什么是JSP,JSP的全称是Java Server Pages,里面包含html标签.css样式.JavaScript脚本和Java代码. 下面我们来说说JSP的执行 ...
- oracle 与 client端执行结果不一致_不同模式下Spark应用的执行过程
根据应用执行的3个阶段,不同执行模式下各个阶段的执行逻辑不相同,本文分析不同模式下的执行逻辑. Yarn-Client模式的执行流程 Yarn的组成 Yarn是hadoop自带的资源管理框架,它的设计 ...
- Sql Server 因为触发器问题导致数据库更新报错“在触发器执行过程中引发了错误,批处理已中止”的问题处理...
在维护一个非常旧的项目时,由于该项目版本已经非常老了,而且在客户现场运行的非常稳定,更要命的是本人目前没有找到该项目的代码,为了处理一个新的需求而且还不能修改程序代码,于是决定从数据库入手,毕竟该项目 ...
- saiku执行过程代码跟踪
使用了很久的saiku,决定跟踪一下代码,看看它的执行核心过程: 一.入口controller代码 1.1.页面打开之后,会发送一个ajax请求 Request URL: http://l-tdata ...
最新文章
- 《中国人工智能ABC人才发展报告》发布,算法和应用类人才短缺
- 计算机视觉深度学习顶会_顶会论文接收量再破纪录,计算机视觉创新正在发生什么变化?丨 CVPR 2019分享会...
- QT关于全局变量的申请以及使用,所有class可用同一个变量
- jzoj3913-艰难的选择【差分,统计】
- python3经典实例_Python3十大经典错误及解决办法
- bettertouchtool闪退_BetterTouchTool for Mac 3.238 无闪退 触控板增强工具
- MyBatis四大核心概念
- 真正优秀的人,都有这3种习惯
- asp.net gridview 模板列 弹出窗口编辑_Mac桌面多窗口整理工具Moom,使用教程
- 5、手把手教React Native实战之盒子模型BoxApp
- plesk 打不开php,如何在 Plesk 中管理 PHP
- python 把当前目录文件夹中的所有图片缩放为640*480
- Oracle日期函数和转换函数
- 董卫凤:不服输的华丽转身(三)
- 肖 sir_就业课__005项目数据
- 浅谈 ext2 文件系统的特点、优缺点以及使用场景
- 知乎里面别人发的视频怎么保存下来?
- 【推荐系统论文精读系列】(五)--Neural Collaborative Filtering
- 二手图书交易网站-图书发布图书购买评价购物车-计算机毕业设计基于javaWebSSMspringboot框架idea开发工具asp.net和PHP
- Scrapy CrawlSpider介绍和使用
热门文章
- 咖说 | 揭秘佳士得首次拍卖的区块链艺术品Portraits of a Mind
- linux擦除nandflash分区,【Linux公开课】NAND Flash存储器分区、烧写流程图、格式化NAND Flash...
- flush privileges 什么意思?
- 西交计算机专业课,20双非跨考上岸西交计算机(912)
- Codeforces 912 D. Fishes (贪心、bfs)
- 如何设计一个PC客户端的架构
- 各种浏览器全屏模式的方法、属性和事件介绍
- 自动挡驾照后上路学习总结
- fortran中如何提供计算程序运行时间?
- 读后感:写给人生的九封信,愿你的人生淡定从容,繁华似锦