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

😁 作者简介:一名大四的学生,致力学习前端开发技术

⭐️个人主页:夜宵饽饽的主页

❔ 系列专栏:JavaScript小贴士

👐学习格言:成功不是终点,失败也并非末日,最重要的是继续前进的勇气

​🔥​前言:

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

文章目录

检查类的关系instance和isPrototype,getPrototypeOf

1 instance方法

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

语法:

js 复制代码
object instanceof constructor

参数:

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

实例:

js 复制代码
//第一种情况
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() 方法用于检查一个对象是否存在于另一个对象的原型链中。

语法:

js 复制代码
prototypeObj.isPrototypeOf(object)

参数:

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

例子:

js 复制代码
//第一种情况
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]] 属性的值)。

语法:

js 复制代码
Object.getPrototypeOf(obj)

参数:

  • obj:要返回原型的对象

返回值:

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

例子:

js 复制代码
const proto = {};
const obj = Object.create(proto);
Object.getPrototypeOf(obj) === proto; // true

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

相关推荐
阿正的梦工坊15 小时前
JavaScript 微任务与宏任务完全指南
开发语言·javascript·ecmascript
知行合一。。。16 小时前
Python--05--面向对象(属性,方法)
android·开发语言·python
青梅橘子皮16 小时前
C语言---指针的应用以及一些面试题
c语言·开发语言·算法
浅时光_c17 小时前
3 shell脚本编程
linux·开发语言·bash
Evand J17 小时前
【三维轨迹目标定位,CKF+RTS,MATLAB程序】基于CKF与RTS平滑的三维非线性目标跟踪(距离+方位角+俯仰角)
开发语言·matlab·目标跟踪
今天又在写代码18 小时前
java-v2
java·开发语言
competes18 小时前
慈善基金投资底层逻辑应用 顶层代码低代码配置平台开发结构方式数据存储模块
java·开发语言·数据库·windows·sql
Ulyanov19 小时前
用Pyglet打造AI数字猎人:从零开始的Python游戏开发与强化学习实践
开发语言·人工智能·python
独自归家的兔19 小时前
OCPP 1.6 协议详解:StatusNotification 状态通知指令
开发语言·数据库·spring boot·物联网
希望永不加班19 小时前
Spring AOP 代理模式:CGLIB 与 JDK 动态代理区别
java·开发语言·后端·spring·代理模式