isPrototypeOf 是用于检测某对象是否在另一对象原型链上的方法,返回布尔值;语法为 prototypeObj.isPrototypeOf(instanceObj),要求 instanceObj 为对象类型;常用于判断继承关系,与 instanceof 视角不同但效果常等价。

isPrototypeOf 是 JavaScript 中用于检测某个对象是否存在于另一个对象的原型链上的方法。它属于所有对象都继承自 Object.prototype 的内置方法,调用时返回布尔值:true 表示该对象是目标对象原型链中的一环,false 表示不是。
基本用法和语法
语法为:prototypeObj.isPrototypeOf(instanceObj)
-
prototypeObj:要检测是否在原型链中的那个对象(通常是构造函数的prototype或某个原型对象) -
instanceObj:待检测的对象(通常是实例) - 必须是对象类型,原始值(如字符串、数字)会报错或返回
false
常见使用场景
最典型的是判断实例是否由某个构造函数“构造出来”,或者确认原型继承关系是否成立:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
-
Array.prototype.isPrototypeOf([])→true(空数组的原型链包含Array.prototype) -
Object.prototype.isPrototypeOf({})→true(普通对象直接继承自Object.prototype) -
Animal.prototype.isPrototypeOf(dog),其中dog是new Dog()实例,且Dog.prototype继承自Animal.prototype→true
注意与 instanceof 的区别
isPrototypeOf 检查的是「某个对象是否出现在另一对象的原型链上」,而 instanceof 检查的是「构造函数的 prototype 是否在实例的原型链上」。
立即学习“Java免费学习笔记(深入)”;
-
Array.prototype.isPrototypeOf(arr)和arr instanceof Array效果等价,但视角不同 -
instanceof依赖右侧是函数(有prototype属性),isPrototypeOf右侧可以是任意对象(比如一个普通对象字面量也可作为原型) - 若你只有原型对象(没有构造函数),只能用
isPrototypeOf
实用小技巧
可用于安全地判断继承关系,尤其在处理第三方库或动态原型链时:
- 检查是否继承自某个基类原型:
BaseView.prototype.isPrototypeOf(viewInstance) - 配合
Object.getPrototypeOf()链式验证:Parent.prototype.isPrototypeOf(Object.getPrototypeOf(child)) - 避免误判
null或undefined:调用前建议先做存在性判断,例如proto && proto.isPrototypeOf(obj)

















