😁 作者简介:一名大四的学生,致力学习前端开发技术
⭐️个人主页:夜宵饽饽的主页
❔ 系列专栏:JavaScript小贴士
👐学习格言:成功不是终点,失败也并非末日,最重要的是继续前进的勇气
🔥前言:
这里是关于对类的关系和判断,我们可以使用instance和isPrototype和getPrototypeOf这三个方法来判断一个类和对象的从属关系,希望可以帮助到大家,欢迎大家的补充和纠正
文章目录
-
- 检查类的关系instance和isPrototype,getPrototypeOf
-
- [1 instance方法](#1 instance方法)
- [2 isPrototypeOf()方法](#2 isPrototypeOf()方法)
- [3 getPrototypeOf方法](#3 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的原型对象,然后达到判断对象关系的目的