Object.getPrototypeOf() 返回 null 时原型链如何终止
原型链在 object.getprototypeof(obj) 返回 null 时终止。这意味着对象已经到达了继承结构的顶层,即 object.prototype 的父级。此时再向上查找属性将不再有任何结果。

const obj = {};
console.log(Object.getPrototypeOf(obj)); // Object.prototype
console.log(Object.getPrototypeOf(Object.prototype)); // null
上述代码展示了普通对象的原型链结构。首先创建一个空对象 obj,它的原型是 Object.prototype。接着获取 Object.prototype 的原型,结果为 null,这标志着原型链的终点。
自定义类实例的原型链终止条件是什么
自定义类实例的原型链同样在 Object.getPrototypeOf() 返回 null 时终止。对于通过 class 关键字定义的类,其实例的原型链会经过类的原型,最终指向 Object.prototype,并在此处结束。

class MyClass {
constructor() {}
}
const instance = new MyClass();
console.log(Object.getPrototypeOf(instance) === MyClass.prototype); // true
console.log(Object.getPrototypeOf(MyClass.prototype) === Object.prototype); // true
console.log(Object.getPrototypeOf(Object.prototype)); // null
这段代码验证了自定义类的原型链走向。创建 MyClass 的实例后,其原型指向 MyClass.prototype。而 MyClass.prototype 本身又是 Object.prototype 的实例,因此它的原型是 Object.prototype。最后,Object.prototype 的原型为 null,完成终止。
使用 Object.create(null) 创建的对象原型链是否终止
使用 Object.create(null) 创建的对象没有原型,其原型直接为 null,因此原型链从创建之初就处于终止状态。这种对象不会继承 Object.prototype 上的任何方法或属性。
const safeObj = Object.create(null);
safeObj.name = 'test';
console.log(Object.getPrototypeOf(safeObj)); // null
console.log(safeObj.hasOwnProperty('name')); // TypeError: safeObj.hasOwnProperty is not a function
示例中创建的 safeObj 是一个纯净的对象,没有任何原型链。由于它不继承自 Object.prototype,所以无法直接使用 hasOwnProperty 等方法,必须通过 Object.prototype.hasOwnProperty.call(safeObj, 'name') 来调用。这证明了原型链在此处确实已经终止,且没有中间层。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











