isprototypeof() 通过检查调用对象是否存在于目标对象的原型链上来工作,若存在则返回 true。具体做法是调用原型对象的方法并传入实例对象作为参数,例如 parent.prototype.isprototypeof(child)。该方法会沿着实例的 [[prototype]] 链向上查找,直到找到匹配的原型对象或到达 null。

isPrototypeOf() 与 instanceof 的区别是什么
两者都用于检测原型关系,但 instanceof 需要构造函数参与,而 isPrototypeOf() 直接操作原型对象。使用 instanceof 时,左侧为实例,右侧为构造函数;使用 isPrototypeOf() 时,左侧为原型,右侧为实例。在跨 iframe 场景中,instanceof 可能失效,而 isPrototypeOf() 依然有效。

function Parent() {}
function Child() {}
Child.prototype = Object.create(Parent.prototype);
const child = new Child();
console.log(Parent.prototype.isPrototypeOf(child)); // true
console.log(child instanceof Parent); // true
当原型链断裂时 isPrototypeOf() 的行为如何
如果原型链被手动修改导致断裂,isPrototypeOf() 将沿当前有效的原型链查找。若目标原型不在链上,则返回 false。即使原型对象本身被替换,只要新原型链中包含目标对象,方法仍返回 true。
立即学习“Java免费学习笔记(深入)”;


















