手写instanceof、手写new操作符

ops/2025/2/6 19:53:05/

文章目录

  • 1 手写instanceof
  • 2 手写new操作符

1 手写instanceof

  • instanceof:用于判断构造函数的prototype属性是否出现在对象原型链中的任何位置
  • 实现步骤:
    1. 获取类型的原型。
    2. 获取对象的原型。
    3. 一直循环判断对象的原型是否等于构造函数的原型对象,直到对象原型为null。
javascript">function myInstanceof(left, right) {let proto = Object.getPrototypeOf(left);let prototype = right.prototype;while (true) {if (proto == null) return false;if (proto === prototype) return true;proto = Object.getPrototypeOf(proto);}
}

2 手写new操作符

  • 调用new:
    1. 创建一个空对象。
    2. 将对象的原型设置为构造函数的prototype。
    3. 让构造函数的this指向这个对象,执行构造函数的代码,为这个新对象添加属性。
    4. 判断函数的返回值类型,如果是值类型,返回创建的对象,如果是引用类型,返回引用类型的对象。
javascript">function myNew() {let newObject = null;let result = null;let constructor = Array.prototype.shift.call(arguments);if (typeof constructor !== "function") {console.error("type error");return;}newObject = Object.create(constructor.prototype);result = constructor.apply(newObject, arguments);let flag = result && (typeof result === "object" || typeof result === "function");return flag ? result : newObject;
}
myNew(构造函数, 初始化参数);

http://www.ppmy.cn/ops/156231.html

相关文章

RabbitMQ深度探索:SpringBoot 整合 RabbitMQ

需创建复合项目 父工程 Maven 依赖&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.0.RELEASE</version></parent><!-- 父工程要打…

Hive:静态分区(分区语法,多级分区,分区的查看修改增加删除)

hive在建表时引入了partition概念。即在建表时&#xff0c;将整个表存储在不同的子目录中&#xff0c;每一个子目录对应一个分区。在查询时&#xff0c;我们就可以指定分区查询&#xff0c;避免了hive做全表扫描&#xff0c;从而提高查询率。 oracle和Hive分区的区别 orcale在…

sql表的增删改、替换

一、增加 1、向原表的字段中插入多条记录的方法 # mysql中常用的三种插入数据的语句: # insert into表示插入数据&#xff0c;数据库会检查主键&#xff0c;如果出现重复会报错&#xff1b; # replace into表示插入替换数据&#xff0c;需求表中有PrimaryKey&#xff0c; # 或…

网络安全-设备安全加固

网络设备也是网络边界很重要的设备&#xff0c;是整个数据中心的主干道&#xff0c;不能有任何闪失&#xff0c;这两天对Nexus网络设备进行了简单的安全加固&#xff0c;对主要的操作进行了下总结&#xff0c;如下&#xff1a; 1、 在Nexus建立了一个只读帐号&#xff0c;如要…

输出解析器的使用

文章目录 输出解析器的使用Pydantic JSON输出解析器结构化输出解析器 输出解析器的使用 输出解析器的使用主要依靠提示词模板对象的partial方法注入输出指令的字符 串&#xff0c;主要的实现方式是利用PromptTemplate对象的partial方法或在实例化PromptTemplate对象时传递parti…

leetcode刷题记录(七十二)——146. LRU 缓存

&#xff08;一&#xff09;问题描述 146. LRU 缓存 - 力扣&#xff08;LeetCode&#xff09;146. LRU 缓存 - 请你设计并实现一个满足 LRU (最近最少使用) 缓存 [https://baike.baidu.com/item/LRU] 约束的数据结构。实现 LRUCache 类&#xff1a; * LRUCache(int capacity)…

一文了解边缘计算

什么是边缘计算&#xff1f; 我们可以通过一个最简单的例子来理解它&#xff0c;它就像一个司令员&#xff0c;身在离炮火最近的前线&#xff0c;汇集现场所有的实时信息&#xff0c;经过分析并做出决策&#xff0c;及时果断而不拖延。 1.什么是边缘计算&#xff1f; 边缘计算…

Unity渲染管线

Unity渲染管线详解 什么是渲染管线 渲染管线&#xff08;Render Pipeline&#xff09;是Unity中处理渲染的核心系统&#xff0c;负责将3D场景转换为最终在屏幕上显示的2D图像。它定义了光照、阴影、材质、后处理效果等的处理方式。 Unity支持的渲染管线类型 1. 内置渲染管线…