isprototypeof()用于检测一个对象是否在另一对象的原型链上,语法为a.isprototypeof(b),返回布尔值;它不依赖构造函数,只检查实际原型链关系,而instanceof则检测b的原型链是否包含a.prototype。

isPrototypeOf() 是 JavaScript 中用于检测一个对象是否存在于另一个对象的原型链上的方法。它不关心构造函数或 class,只关注实际的原型链关系。
基本用法和返回值
语法是:A.isPrototypeOf(B),意思是 “A 是否在 B 的原型链上”。如果 A 是 B 的原型(直接或间接),返回 true;否则返回 false。
- 必须是对象调用,不能是 null 或 undefined
- 参数 B 必须是对象(否则会抛出 TypeError)
- 它检查的是 整个原型链,不只是直接原型(即 Object.getPrototypeOf(B))
常见使用场景举例
比如判断数组是否继承自 Array.prototype:
-
Array.prototype.isPrototypeOf([1, 2, 3])→ true -
Object.prototype.isPrototypeOf([])→ true(因为所有对象最终都继承自 Object.prototype) -
Date.prototype.isPrototypeOf(new Date())→ true -
Array.prototype.isPrototypeOf({})→ false(普通对象不在 Array 原型链上)
和 instanceof 的区别
isPrototypeOf() 和 instanceof 都能判断原型链关系,但角度不同:
-
A.isPrototypeOf(B):从“原型对象 A”出发,看它是否在 B 的链上 -
B instanceof A:从“实例 B”出发,看它是否由 A(或其子类)构造,且 A.prototype 在 B 的原型链中 - 注意:
instanceof要求右边必须是函数(有 prototype 属性),而isPrototypeOf()右边可以是任意对象 - 例如:
[].__proto__.isPrototypeOf([1,2])是合法的;但[1,2] instanceof [].__proto__会报错(因为 [].__proto__ 不是函数)
实用小技巧
可以配合 Object.getPrototypeOf() 或 __proto__ 理解链路:
Array.prototype.isPrototypeOf([1]) === true-
Object.getPrototypeOf([1]) === Array.prototype→ 直接原型匹配 -
Object.prototype.isPrototypeOf(Array.prototype)→ true,说明 Array.prototype 自身也继承自 Object.prototype - 所以
Object.prototype.isPrototypeOf([1])也是 true(通过 Array.prototype 间接继承)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











