登录
首页 >  文章 >  前端

判断一个对象是否在另一个对象的原型链上,可以使用 isPrototypeOf() 方法。该方法用于检查某个对象是否是另一个对象的原型(即是否存在于该对象的原型链中)。语法:prototype.isPrototypeOf(object)prototype:要检查是否为原型的对象。object:要检查其原型链的对象。示例说明:function Person() {} const person = ne

时间:2026-05-16 21:03:38 265浏览 收藏

JavaScript 中的 `isPrototypeOf()` 是一个底层而灵活的原型链检测工具,它允许你直接判断某个对象是否存在于另一对象的原型链中——不依赖构造函数,只关注真实的原型继承关系;相比 `instanceof`,它更通用(可用于普通对象作原型)、更精确(绕过构造函数语义干扰),但也要求调用方必须是“潜在原型”而非实例本身,掌握它能帮你深入理解 JavaScript 的原型机制并写出更健壮的类型与继承检查逻辑。

如何通过 isPrototypeOf() 判定一个对象是否位于另一个对象的原型链上

isPrototypeOf() 是 JavaScript 中用于检测某个对象是否存在于另一个对象的原型链上的方法。它调用在「潜在的原型对象」上,传入「待检测的对象」作为参数,返回布尔值。

基本用法和语法

语法格式为:
prototypeObject.isPrototypeOf(instanceObject)

其中:

  • prototypeObject 是你怀疑自己“是别人原型”的那个对象(通常是构造函数的 prototype 或某个普通对象);
  • instanceObject 是你想要检查其原型链中是否包含 prototypeObject 的那个实例或对象;
  • 只要 prototypeObject 出现在 instanceObject 的原型链中(包括直接原型、间接原型,甚至 Object.prototype),就返回 true

常见使用场景示例

✅ 检查构造函数原型是否被继承:

function Animal() {}
function Dog() {}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

const myDog = new Dog();

console.log(Animal.prototype.isPrototypeOf(myDog)); // true
console.log(Dog.prototype.isPrototypeOf(myDog));      // true
console.log(Object.prototype.isPrototypeOf(myDog));   // true

✅ 检查普通对象是否以某对象为原型:

const parent = { name: 'Parent' };
const child = Object.create(parent);
console.log(parent.isPrototypeOf(child)); // true

❌ 注意:不能反过来调用 —— 实例对象上没有 isPrototypeOf 方法来“查自己的原型”,必须由原型对象发起判断:

myDog.isPrototypeOf(Animal.prototype); // TypeError: myDog.isPrototypeOf is not a function

与 instanceof 的区别

isPrototypeOf()instanceof 都能判断原型链关系,但角度不同:

  • instanceof 写成 obj instanceof Constructor,关注的是「Constructor.prototype 是否在 obj 的原型链上」;
  • isPrototypeOf() 更底层、更灵活,可直接用任意对象(不一定是函数的 prototype)做原型检测;
  • instanceof 依赖构造函数的 prototype 属性,而 isPrototypeOf() 不关心是否是构造函数,只看实际原型链。

注意事项和边界情况

⚠️ 以下情况会返回 false

  • 传入 nullundefined 作为参数(会抛出 TypeError);
  • 原型链被显式切断(如重写了 __proto__ 或用 Object.setPrototypeOf(obj, null));
  • 检测对象自身就是原型对象(即 obj.isPrototypeOf(obj)),这始终为 false,因为原型链从 [[Prototype]] 开始,不包含自身。

? 小技巧:想快速查看一个对象的整个原型链,可用 Object.getPrototypeOf() 连续调用,或浏览器控制台中展开 __proto__ 查看。

理论要掌握,实操不能落!以上关于《判断一个对象是否在另一个对象的原型链上,可以使用 isPrototypeOf() 方法。该方法用于检查某个对象是否是另一个对象的原型(即是否存在于该对象的原型链中)。语法:prototype.isPrototypeOf(object)prototype:要检查是否为原型的对象。object:要检查其原型链的对象。示例说明:function Person() {} const person = new Person(); // 检查 person 的原型链是否包含 Person.prototype console.log(Person.prototype.isPrototypeOf(person)); // true // 检查 Object.prototype 是否在 person 的原型链上 console.log(Object.prototype.isPrototypeOf(person)); // true原理说明:在 JavaScript 中,每个对象都有一个内部属性 [[Prototype]],它指向该对象的原型。通过 isPrototypeOf() 方法,可以判断某个对象是否是另一个对象的原型链上的一个原型。注意事项:isPrototypeOf() 与 instanceof 不同。instanceof 是用来检查对象是否是某个构造函数的实例,而 isPrototypeOf() 是检查某个对象是否是另一个对象的原型。如果你想要检查一个对象是否是某个构造函数的实例,推荐使用 instanceof。示例对比: function Dog() {} const dog = new Dog(); console.log(Dog.prototype.isPrototypeOf》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

资料下载
相关阅读
更多>
最新阅读
更多>