js中的instance,isPrototype和getPrototypeOf的使用,来判断类的关系

news2024/10/6 14:26:06

在这里插入图片描述

😁 作者简介:一名大四的学生,致力学习前端开发技术
⭐️个人主页:夜宵饽饽的主页
❔ 系列专栏:JavaScript小贴士
👐学习格言:成功不是终点,失败也并非末日,最重要的是继续前进的勇气

​🔥​前言:

这里是关于对类的关系和判断,我们可以使用instance和isPrototype和getPrototypeOf这三个方法来判断一个类和对象的从属关系,希望可以帮助到大家,欢迎大家的补充和纠正

文章目录

    • 检查类的关系instance和isPrototype,getPrototypeOf
      • 1 instance方法
      • 2 isPrototypeOf()方法
      • 3 getPrototypeOf方法

检查类的关系instance和isPrototype,getPrototypeOf

1 instance方法

概念: **instanceof**运算符用于检测构成函数的prototype属性是否出现在某一个实例对象的原型链上面

语法:

object instanceof constructor

参数:

  • object:某一个实例对象
  • constructor:某一个构造函数

实例:

//第一种情况
function Foo(){

}

Foo.prototype.blah=function(){
	console.log('验证')
}

var a=new Foo()

console.log(a instanceof Foo) //true

//第二种情况
class Person {}

const p = new Person();

console.log(p instanceof Person); // true

上述的代码中,instanceof 操作符的左操作数是一个普通的对象,右操作数是一个函数。instanceof 回答的问题是:在 a 的整条 [[Prototype]] 链中是否有指向 Foo.prototype 的对象?

😔 可惜的是,这个方法只能处理对象(a)和函数之间的关系,如果想要判断两个对象(比如a和b)之间是否通过[[Prototype]]链关联,我们就得请出下一个方法isPrototypeOf

2 isPrototypeOf()方法

概念: isPrototypeOf() 方法用于检查一个对象是否存在于另一个对象的原型链中。

语法:

prototypeObj.isPrototypeOf(object)

参数:

  • object:要搜索其原型链的对象
  • prototypeObj:原型对象

例子:

//第一种情况
function Person() {} 

var p = new Person();

console.log(Person.prototype.isPrototypeOf(p)); // true

//第二种情况
function Student() {}

Student.prototype = Object.create(Person.prototype); 

var s = new Student();

console.log(Person.prototype.isPrototypeOf(s)); // true

3 getPrototypeOf方法

概念: Object.getPrototypeOf() 静态方法返回指定对象的原型(即内部 [[Prototype]] 属性的值)。

语法:

Object.getPrototypeOf(obj)

参数:

  • obj:要返回原型的对象

返回值:

给定对象的原型,可能是null

例子:

const proto = {};
const obj = Object.create(proto);
Object.getPrototypeOf(obj) === proto; // true

上述代码中,创建了obj的原型对象是proto,使用getPrototypeOf方法来获取obj的原型对象,然后达到判断对象关系的目的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1214206.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

conda安装与镜像源配置

下载Anaconda 最好去下面这个国内镜像网站: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下载过程中,我勾选了添加到环境变量(虽然软件爆红提醒了),取消勾选了设置python3.7为默认python版本。 接下来&…

LLM系列 | 27 : 天工大模型Skywork解读及揭露刷榜内幕引发的思考

引言 简介 预训练 ​语料 分词器 模型架构 Infrastructure 训练细节 评测 实战 总结 思考 0. 引言 晨起开门雪满山,雪晴云淡日光寒。 Created by DALLE 3 小伙伴们好,我是《小窗幽记机器学习》的小编:卖热干面的小女孩。紧接前…

并发编程(多线程)-可见性、有序性、原子性问题

可见性 可见性概念 可见性(Visibility):是指一个线程对共享变量进行修改,另一个先立即得到修改后的最新值 可见性演示 案例演示:一个线程根据boolean类型的标记flag,while循环,另一个线程改…

基于鸽群算法优化概率神经网络PNN的分类预测 - 附代码

基于鸽群算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于鸽群算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于鸽群优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

Android设计模式--策略模式

每天都要完成一个小目标 一,定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化 什么意思呢?在我们平时的开发中,难免会遇到这种情况&…

保姆级fastDFS安装教程

一、软件准备 环境需要准备四个包,分别是: 1. libfastcommon_1.0.36 2. FastdfsFastdfs_v5.11 3. fastdfs-nginx-module5.11 4. nginxnginx-1.12.2 二、环境准备 安装perl环境,后续编译fastdfs会用到 yum -y install perl* yum -y ins…

MySQL数据库清理Relay_Log_File日志

背景 “Relay_Log_File” 是 MySQL 中用于复制的参数之一。在 MySQL 复制中,当一个服务器作为主服务器(master)时,它会将其更改写入二进制日志文件(binary log file)。而另一个服务器作为从服务器&#xf…

springboot--单元测试

单元测试 前言1、写测试要用的类2、写测试要用的类3、运行测试类4、spring-boot-starter-test默认提供了以下库4.1 junit54.1.1 DisplayName:为测试类或者测试方法设置展示名称4.1.2 BeforeAll:所有测试方法运行之前先运行这个4.1.3 BeforeEach:每个测试…

Vue3问题:如何实现拼图验证+邮箱登录功能?前后端!

前端功能问题系列文章,点击上方合集↑ 序言 大家好,我是大澈! 本文约3500字,整篇阅读大约需要5分钟。 本文主要内容分三部分,第一部分是需求分析,第二部分是实现步骤,第三部分是问题详解。 …

给女朋友开发个小程序低价点外卖吃还能赚钱

前言 今天又是无聊的一天,逛了下GitHub,发现一个库里面介绍美团饿了吗外卖红包外卖优惠券,先领红包再下单。外卖红包优惠券,cps分成,别人领红包下单,你拿佣金。哇靠,那我岂不是可以省钱还可以赚钱,yyds。。。。想想都美好哈哈哈!!! 回到正题,这个是美团饿了么分销…

esp-01刷固件/下载软件到内部单片机的方法

此文章为转载,非原创 一、准备 需要准备三个东西: 1.esp模块。ESP-01 和 ESP-01s 的引脚及 flash 容量基本完全兼容,只是内部硬件设计粗糙与否的区别,所以理论上都适用。 2.官方固件。此部分可以从安信可官方教程中下载&#xff0…

python之使用深度学习创建自己的表情符号

目录 部署项目1、首先运行train.py训练模型2、接下运行gui.py测试 一、使用 CNN 进行面部情绪识别二、GUI 代码和表情符号映射 在这个深度学习项目中,我们将对人类面部表情进行分类,以过滤和映射相应的表情符号或头像。 数据集(面部表情识别&…

提效神器!10%标注数据,比肩全量标注的模型效果!

不知道大家有没有遇到过数据标注成本高、周期长的困扰,有没有那么一种可能,精心标注少量的数据,配合大量的无标注数据,就能达到比肩全量标注的模型精度呢?是的,PaddleX就带来了这样一款提效神器——大模型半…

超级干货!如何挖公益SRC实战/SQL注入

目录 一、信息收集 二、实战演示 三、使用sqlmap进行验证 四、总结 一、信息收集 1.查找带有ID传参的网站(可以查找sql注入漏洞) inurl:asp idxx 2.查找网站后台(多数有登陆框,可以查找弱口令,暴力破解等漏洞&…

第一百七十四回 如何创建扇形渐变背景

文章目录 1. 概念介绍2. 实现方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在 上一章回中介绍了"如何创建线性渐变背景"相关的内容,本章回中将介绍" 如何创建扇形渐变背景"。闲话休提,让我们一起Talk Flutter吧。 …

打开GeoTIFF文件失败:Unknown field with tag

用QGIS输出的数据类型为UInt16的TIFF文件,无法在GIMP中打开。 GIMP消息提示: 调查 用ImageMagick打开TIFF文件,虽然会出现警告,但是最终还是打开了: 在ImageMagick中重新保存后,就可以用GIMP打开了。使用…

Mapstruct 搭配MP分页食用 - 参考自ballcat项目

参考自 ballcat 一键抵达: Gitee GitHub 场景 使用MyBatis Plus的selectPage方法进行分页查询之后,如果需要将Entity对象转换为Vo对象,需要从Page对象中取出集合列表,手动转换成Vo集合列表数据重新放进Page对象中。 取出集合 设置…

使用postman测试

第一步: 第二步: 第三步:添加请求 第四步:填写请求 代码实现自动关联的位置: 为相关联的接口设置环境: 使用设置的环境变量: 参数化实现测试:测试脚本中仅测试数据不一样&#xff…

[答疑]改善系统的性能,用得着业务建模吗

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 第五元素 2023-10-27 22:02 潘老师,请教一个实践中遇到的问题: 假设生产人员使用某个工具处理数据,需要10天时间;现在改进了这个工具…

Java排序算法之堆排序

图解 堆排序是一种常见的排序算法,它借助了堆这种数据结构。堆是一种完全二叉树,它可以分为两种类型:最大堆和最小堆。在最大堆中,每个结点的值都大于等于它的子结点的值,而在最小堆中,每个结点的值都小于等…