isprototypeof() 通过检查调用对象是否存在于目标对象的原型链中来判断。具体做法是调用 prototypeobj.isprototypeof(targetobj),如果 targetobj 的 [[prototype]] 内部属性直接或间接指向 prototypeobj,则返回 true;否则返回 false。

Object.create() 创建的对象如何验证原型
使用 Object.create(proto) 创建的对象,其原型直接指向传入的参数。验证时,调用 proto.isPrototypeOf(createdObj) 即可确认关系。这种方法不经过构造函数,直接建立原型链接,适合需要特定原型但不想实例化构造函数的场景。

const proto = { type: 'custom' };
const obj = Object.create(proto);
console.log(proto.isPrototypeOf(obj)); // true
console.log(Object.prototype.isPrototypeOf(obj)); // true
new 关键字下的原型链验证
在使用 new 关键字实例化对象时,新对象的 [[Prototype]] 会自动指向构造函数的 prototype 属性。此时,Constructor.prototype.isPrototypeOf(instance) 必然为 true。这是 JavaScript 中基于原型的继承机制的核心体现,确保了 instanceof 和 isPrototypeOf 的一致性。

function Animal() {}
const dog = new Animal();
console.log(Animal.prototype.isPrototypeOf(dog)); // true
console.log(Object.prototype.isPrototypeOf(dog)); // true
原型链断裂时的判断结果
当手动修改原型链或设置 null 原型时,isPrototypeOf() 的行为会发生变化。例如,使用 Object.create(null) 创建的对象没有原型链,任何内置原型对象对其调用 isPrototypeOf() 都会返回 false。这体现了原型链查找的终止条件:到达 null 时停止搜索并返回 false。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











