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

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

在这里插入图片描述

😁 作者简介:一名大四的学生,致力学习前端开发技术
⭐️个人主页:夜宵饽饽的主页
❔ 系列专栏: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的原型对象,然后达到判断对象关系的目的

相关文章:

  • 这就是思维导图!全面分析思维导图的实际用途
  • 深度学习_13_YOLO_图片切片及维度复原
  • 如何下载 Apache + PHP + Mysql 集成安装环境并结合内网穿透工具实现公网访问内网服务
  • 【 云原生 | K8S 】kubeadm 部署Kubernetes集群
  • Redis 5大数据类型命令解读
  • 作为程序员,我建议你学会写作
  • 如何解决网页中的pdf文件无法下载?pdf打印显示空白怎么办?
  • 在Spring Boot中使用进程内缓存和Cache注解
  • 当我只有一个代理,我该如何从内网搭建一个docker环境
  • edge/chrome浏览器favicon.ico缓存问题
  • TEMU要求提交RSL Report 铅镉RSL邻苯项目化学物质检测报告
  • Sentinel
  • Clickhouse学习笔记
  • 【博客系统】 二
  • Vue 路由使用
  • “大数据应用场景”之隔壁老王(连载四)
  • 08.Android之View事件问题
  • Java程序员幽默爆笑锦集
  • JS数组方法汇总
  • js中的正则表达式入门
  • SQLServer插入数据
  • 聚类分析——Kmeans
  • 坑!为什么View.startAnimation不起作用?
  • 排序算法之--选择排序
  • 深入浏览器事件循环的本质
  • 思维导图—你不知道的JavaScript中卷
  • 微服务入门【系列视频课程】
  • 在weex里面使用chart图表
  • Prometheus VS InfluxDB
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​ArcGIS Pro 如何批量删除字段
  • ​如何在iOS手机上查看应用日志
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • # 计算机视觉入门
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • $.ajax()
  • ()、[]、{}、(())、[[]]命令替换
  • (1)Nginx简介和安装教程
  • (6)设计一个TimeMap
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (十一)c52学习之旅-动态数码管
  • (一)为什么要选择C++
  • (原)本想说脏话,奈何已放下
  • (转)Linux下编译安装log4cxx
  • .mysql secret在哪_MYSQL基本操作(上)
  • .net wcf memory gates checking failed
  • .Net Winform开发笔记(一)
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net 受管制代码
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET中的Exception处理(C#)
  • .NET中两种OCR方式对比
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?