object.getprototypeof能准确返回object.create建立的继承关系中的直接原型。它只读取对象内部[[prototype]]链接,不依赖构造函数或class语法,适用于单层、多层及object.create(null)等场景,且不受realm限制。

可以,而且这是它最典型、最可靠的使用场景之一。
Object.getPrototypeOf 能准确返回通过 Object.create 建立的继承关系中的直接原型,不依赖构造函数、不关心 class 语法,只读取对象内部的 [[Prototype]] 链接。
它能清晰反映 Object.create 的设计意图
当你写:
const parent = { say() { return 'hello'; } };
const child = Object.create(parent);
那么:
-
Object.getPrototypeOf(child) === parent→ true -
child.say()可以调用,因为查找路径是:child → parent → null - 这条链完全由
Object.create(parent)设定,Object.getPrototypeOf直接暴露这个结果
注意几个关键点
-
Object.create(null)创建的对象,Object.getPrototypeOf(obj)返回null,说明它没有原型,这本身就是一种有效检测 - 如果你用
Object.create(Object.prototype),结果和{}字面量一样,Object.getPrototypeOf(obj)返回Object.prototype - 多层继承也能逐级获取:
const A = {}; const B = Object.create(A); const C = Object.create(B); Object.getPrototypeOf(C) === B; Object.getPrototypeOf(B) === A; Object.getPrototypeOf(A) === Object.prototype;
和 instanceof 的区别在这里特别明显
-
child instanceof Object→ true(因为 Object.prototype 在链上) -
child instanceof (function(){})→ false(没关联构造函数) - 但
Object.getPrototypeOf(child)不管这些,只告诉你“它的上一级原型是谁”
所以,只要继承是通过 Object.create 显式建立的,Object.getPrototypeOf 就能原样读出,不丢失、不误判、不跨 realm 失效。











