当前位置: 首页 > news >正文

51. new 操作符的实现原理?

51. new 操作符的实现原理?

new 操作符的执行过程:

  • 首先创建了一个新的空对象
  • 设置原型, 将对象的原型设置为函数的 prototype 对象
  • 让函数的 this 指向这个对象, 执行构造函数的代码(为这个新对象添加属性)
  • 判断函数的返回值类型, 如果是值类型, 返回创建的对象。如果是引用类型, 就返回这个引用类型的对象

具体实现:

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('构造函数', '初始化参数');

相关文章:

  • ArcGIS模拟风场(流场)
  • 【Pytorch】torch. bmm()
  • 并发编程模型
  • 使用Mindspore运行Resnet50Imagenet
  • 基于springboot+vue的在线作业管理考试系统 elementui
  • 07、Metasploit渗透测试框架的基本使用
  • DUBBO版本差异
  • 现在的数字藏品该怎么玩才不会被割韭菜?
  • LeetCode_双指针_中等_611.有效三角形的个数
  • 代理模式——静态代理和动态代理
  • 时域中的离散时间信号02—详解离散卷积
  • 一个Kbuild工程生成多个ko文件及其在驱动单元测试上的应用
  • 计算机毕业设计java毕业设计项目源代码精品SSM学生选课系统[包运行成功]
  • 1-4 数组元素的区间删除
  • 计算机毕业论文java毕业设计选题源代码javaweb学生信息管理/学生考试系统[包运行成功]
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • HTTP中GET与POST的区别 99%的错误认识
  • js中的正则表达式入门
  • 分布式任务队列Celery
  • 面试遇到的一些题
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前端技术周刊 2019-02-11 Serverless
  • ​flutter 代码混淆
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (03)光刻——半导体电路的绘制
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (C语言)fread与fwrite详解
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (九)One-Wire总线-DS18B20
  • (四)Linux Shell编程——输入输出重定向
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • ... 是什么 ?... 有什么用处?
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .Net多线程总结
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • @Autowired注解的实现原理
  • @RequestMapping 的作用是什么?
  • @取消转义
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [Angular 基础] - 指令(directives)
  • [BZOJ2850]巧克力王国
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)
  • [CVPR2021]Birds of a Feather: Capturing Avian Shape Models from Images
  • [C语言]——分支和循环(4)
  • [FTP]pureftp部署和优化
  • [Hive] CTE 通用表达式 WITH关键字
  • [Leetcode] Permutations II
  • [lesson17]对象的构造(上)