使用 isPrototypeOf() 方法最准确,如 Parent.prototype.isPrototypeOf(childInstance) 返回 true;也可手动遍历原型链,通过 Object.getPrototypeOf() 循环判断,但推荐前者,语义清晰且可靠。

要判断一个对象是否是另一个对象的原型链祖先,最准确的方法是使用 Object.getPrototypeOf() 配合循环遍历原型链,或者使用 isPrototypeOf() 方法。
语法: prototypeObj.isPrototypeOf(object)
如果 prototypeObj 出现在 object 的原型链中,返回 true,否则返回 false。
function Parent() {}
function Child() {}
Child.prototype = Object.create(Parent.prototype);
const childInstance = new Child();
console.log(Parent.prototype.isPrototypeOf(childInstance)); // true
console.log(Object.prototype.isPrototypeOf(childInstance)); // true
console.log(Array.prototype.isPrototypeOf(childInstance)); // false
Object.getPrototypeOf() 可以手动检查整个原型链。
这种方法适合学习原型链机制,或需要自定义判断逻辑时使用。
立即学习“Java免费学习笔记(深入)”;
示例:实现一个通用函数function isPrototypeAncestor(ancestor, obj) {
let proto = Object.getPrototypeOf(obj);
while (proto !== null) {
if (proto === ancestor) {
return true;
}
proto = Object.getPrototypeOf(proto);
}
return false;
}
// 使用示例
function A() {}
function B() {}
B.prototype = Object.create(A.prototype);
const b = new B();
console.log(isPrototypeAncestor(A.prototype, b)); // true
console.log(isPrototypeAncestor(Object.prototype, b)); // true
__proto__ 或 constructor 进行判断,原因如下:
__proto__ 已被弃用,尽管大多数环境仍支持,但不推荐在生产中使用。constructor 属性容易被修改或丢失,不可靠。instanceof 来判断任意两个对象之间的原型关系,它只适用于构造函数与实例之间,且跨执行上下文(如 iframe)会失效。基本上就这些。优先使用 isPrototypeOf(),它标准、安全、语义明确。手动遍历适合理解原理或特殊场景。
以上就是在 JavaScript 中,如何准确判断一个对象是否是另一个对象的原型链祖先?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号