object.isprototypeof用于检测一个对象是否在另一对象的原型链中,语法为prototypeobj.isprototypeof(instanceobj),返回布尔值;需对象调用,仅接受一个参数;常用于继承判断、跨iframe场景,与instanceof的核心区别在于前者检查原型对象本身,后者检查构造函数的prototype属性。

Object.isPrototypeOf 用于检测一个对象是否在另一个对象的原型链上,即“前者是否是后者的原型(或原型链中的一环)”。
基本用法和返回值
语法是:prototypeObj.isPrototypeOf(instanceObj),其中 prototypeObj 是待检测的原型对象,instanceObj 是待检测的实例对象。返回布尔值:true 表示 prototypeObj 出现在 instanceObj 的原型链中,否则为 false。
注意:必须是对象调用,不能是 null 或 undefined;且只接受一个参数(即被检测的对象),不是两个参数传入。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
常见使用场景
- 判断某个构造函数的
prototype是否被某实例继承 - 检查自定义类或对象是否继承自特定父级(比如是否是
Array、EventTarget等的实例) - 替代部分
instanceof的功能,尤其在跨 iframe 场景下更可靠(因为instanceof依赖构造函数引用,而不同 iframe 的 Array 构造函数不相等)
和 instanceof 的关键区别
Object.isPrototypeOf 关注的是原型链上的对象本身,而 instanceof 关注的是构造函数的 prototype 属性值是否在原型链中。
例如:
function Foo() {}
const obj = new Foo();
Foo.prototype.isPrototypeOf(obj); // true
obj instanceof Foo; // true
// 但直接用 Foo 本身调用会报错
// Foo.isPrototypeOf(obj); // TypeError: Foo.isPrototypeOf is not a function
// 而 Object.prototype.isPrototypeOf 是安全的
Object.prototype.isPrototypeOf(obj); // true(所有对象都继承自 Object.prototype)
实用技巧与注意事项
- 可以链式检测:如
Array.prototype.isPrototypeOf([1,2])→true - 检测内置类型时,优先用其
prototype对象,而非构造函数本身 - 对原始值(如字符串字面量
"abc")会自动装箱,所以String.prototype.isPrototypeOf("abc")返回true - 空对象
{}的原型是Object.prototype,所以Object.prototype.isPrototypeOf({})为true
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










