【JavaScript】new 的原理以及实现

news/2024/10/19 7:26:07/

网道 - new 命令的原理

使用new命令时,它后面的函数依次执行下面的步骤。

  1. 创建一个空对象,作为将要返回的对象实例。
  2. 将这个空对象的原型,指向构造函数的prototype属性。
  3. 将这个空对象赋值给函数内部的this关键字。
  4. 如果构造函数返回了一个对象,则返回该对象,否则返回新创建的对象。

模拟实现

[].slice.call() 将伪数组转为真数组,等同 Array.from()

function _new(constructor, ...args) {// 1. 创建一个空对象,作为将要返回的对象实例。const obj = {}// 2. 将这个空对象的原型,指向构造函数的prototype属性。obj.__proto__ = constructor.prototype// 3. 将这个空对象赋值给函数内部的this关键字。(使用构造函数处理obj作为上下文this)const result = constructor.apply(obj, [].slice.call(args))// 4. 如果构造函数返回了一个对象,则返回该对象,否则返回新创建的对象。return (typeof result === 'object' && result != null) ? result : obj;
}// 使用
function Person(name, age) {this.name = namethis.age = age
}
Person.prototype.say = function() {return `我叫: ${this.name}, 今年: ${this.age} 岁!`
}
const person1 = _new(Person, '张三', 22)
const person2 = _new(Person, '李四', 18)

在这里插入图片描述


http://www.ppmy.cn/news/1026374.html

相关文章

面试攻略,Java 基础面试 100 问(九)

数组有没有 length()方法?String 有没有 length()方法? 数组没有 length()方法,有 length 的属性。String 有 length()方法。JavaScript 中,获得字符串的长度是通过 length 属性得到的,这一点容易和 Java混淆。 在 Java 中&…

论文阅读:《Waymo Public Road Safety Performance Data》

文章目录 1 背景2 方法2.1 数据来源2.2 碰撞数据 3 碰撞事件分析4 讨论 1 背景 这篇文章是讲waymo道路安全性能数据分析的,主要想表达的是waymo自动驾驶系统在安全上面的出色表现,以向政府、大众提高自己产品的公信力。 这篇文章分析的数据是自从2019年到…

智能优化算法:猎豹优化算法-附代码

智能优化算法:猎豹优化算法 文章目录 智能优化算法:猎豹优化算法1.猎豹优化算法1.1 初始化1.2 搜索策略1.3坐等策略1.4攻击策略 2.实验结果3.参考文献4.Matlab5.python 摘要:CO算法是Mohammad AminAkbari等人于2022年受自然界猎豹狩猎启发而提…

F12诡异Bug分享

Bug本身情况 java运行的时候会产生class文件,其本身是跑class文件的,但某个实施反馈一个经典版本的长久bug。 当使用模糊查询时,一页一页查看,在倒数第二页时,点击下一页,页面静止不动。(正常情…

JavaScript基础 第五天

1.什么是对象以及对象的基本使用 2.对象的操作 --增删改查 3.对象的方法 4.数学内置对象 5.简单数据类型和引用数据类型 一.什么是对象以及对象的基本使用 ① 对象是什么 可以理解为一种无序的数据集合,数组是有序的数据集合对象通常用来描述某个事物&#x…

谁能讲清楚Spark之Spark系统架构

### 整体架构概述 Spark与Hadoop MapReduce的结构类似,Spark也采用Master-Worker结构。如果一个Spark集群由4个节点组成,即1个Master节点和3个Worker节点,那么在部署Standalone版本后,Spark部署的系统架构图如图2.1所示。简单来说,Master节点负责管理应用和任务,…

学生成绩管理系统V2.0

某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,参考前面章节的“学生成绩管理系统V1.0”,用一维数组和函数指针作函数参数编程实现如下菜单驱动的学生成绩管理系统,其中每位同学的学号和成绩等数据可以…

netcat反弹shell

命令执行nc反弹shell 瑞士军刀 在执行命令漏洞,一般的利用漏洞是执行反弹shell在进行其他操作。 执行反弹shell的命令有许多。 反弹shell因为是受害者,反向连接远程服务器,请求是内部到外部,所以防火墙是不会进行拦截的。 反弹…