看清原型链继承层级的关键是用object.getprototypeof逐层验证直至null,辅以控制台__proto__展开、console.dir观察constructor及校验内置类型固定路径。

看清原型链的继承层级,关键不是“猜”,而是用浏览器开发者工具和标准 API 主动展开、逐层验证。下面几种方法实用、稳定、不依赖非标准属性。
用 Object.getPrototypeOf 一层层向上查
这是最推荐的方式,语义清晰且符合规范。每调用一次,就拿到当前对象的直接原型,直到返回 null 为止。
- 先获取实例的原型:
Object.getPrototypeOf(obj) - 再查它的原型:
Object.getPrototypeOf(Object.getPrototypeOf(obj)) - 持续调用,直到结果为
null—— 那就是链的终点
例如:
function Animal() {}
Animal.prototype.speak = function() {};
function Dog() {}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
const d = new Dog();
console.log(Object.getPrototypeOf(d) === Dog.prototype); // true
console.log(Object.getPrototypeOf(Dog.prototype) === Animal.prototype); // true
console.log(Object.getPrototypeOf(Animal.prototype) === Object.prototype); // true
console.log(Object.getPrototypeOf(Object.prototype)); // null
在控制台里展开 __proto__(仅用于观察)
Chrome/Firefox 控制台中,打印一个对象后点击展开,能看到 __proto__ 展开项。虽然 __proto__ 已不推荐用于代码逻辑,但它在调试时非常直观:
- 点开对象 → 找到
__proto__→ 再点开它的__proto__→ 继续…… - 每一层都能看到该原型上定义了哪些方法(如
speak、toString) - 注意:最后一层
__proto__是null,不能再点
用 console.dir 配合 constructor 看构造关系
console.dir(obj) 会以结构化方式展示对象及其原型链,比 console.log 更适合调试继承关系。
- 它会显示每个层级的
constructor名称(如Dog、Animal、Object) - 配合查看各层
constructor.prototype是否一致,能快速判断是否继承正确 - 比如:
Dog.prototype.constructor === Dog应为 true;若被覆盖或漏写,这里会暴露问题
检查内置类型原型链的固定路径
多数常见对象有可预期的终点,可作为校验锚点:
- 普通对象(
{})→Object.prototype→null - 数组(
[])→Array.prototype→Object.prototype→null - 函数(
function(){})→Function.prototype→Object.prototype→null
如果某对象的原型链没走到 Object.prototype 就断了,说明原型被意外篡改过。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











