Object.getPrototypeOf()用于获取对象的内部[[Prototype]],返回其直接原型,如{}返回Object.prototype、[]返回Array.prototype、null原型对象返回null;推荐替代非标准__proto__,不可在实例上调用。

Object.getPrototypeOf() 用于获取指定对象的原型(即其内部 [[Prototype]] 指向的对象),这是理解 JavaScript 原型链和继承机制的关键方法之一。
基本用法:直接获取对象的原型
传入任意对象,返回它的直接原型对象。如果该对象没有显式原型(如通过 Object.create(null) 创建),则返回 null。
-
普通对象:
Object.getPrototypeOf({})返回Object.prototype -
数组:
Object.getPrototypeOf([1, 2])返回Array.prototype -
函数:
Object.getPrototypeOf(function(){})返回Function.prototype -
null 原型对象:
Object.getPrototypeOf(Object.create(null))返回null
判断原型关系:配合 isPrototypeOf 或 === 使用
不能直接用 == 或 === 判断“是否为某个类的实例”,但可以结合 Object.getPrototypeOf() 和原型比对来验证继承路径。
- 检查某对象是否继承自
Array.prototype:Object.getPrototypeOf(arr) === Array.prototype - 逐级向上查原型链(模拟
instanceof的部分逻辑):let proto = Object.getPrototypeOf(obj); while (proto !== null) { if (proto === SomeConstructor.prototype) { /* 找到了 */ } proto = Object.getPrototypeOf(proto); }
与 __proto__ 的区别:推荐用 getPrototypeOf,避免直接操作 __proto__
__proto__ 是非标准但广泛支持的访问器属性,而 Object.getPrototypeOf() 是标准、安全、只读的方式。
- ✅ 推荐:
Object.getPrototypeOf(obj)—— 标准、不可写、性能稳定 - ⚠️ 不推荐:
obj.__proto__—— 已被列为遗留特性,某些严格环境可能不支持,且易引发意外修改 - ❌ 错误写法:
obj.getPrototypeOf()—— 对象实例上没有这个方法,必须用Object.调用
实际应用场景举例
常用于库开发、类型检测、调试原型链或实现自定义继承逻辑。
-
区分原生数组和类数组对象:
Object.getPrototypeOf(fakeArray) === Array.prototype可快速排除arguments或NodeList -
验证自定义类的继承结构:
class B extends A {};Object.getPrototypeOf(new B()) === B.prototype,再查B.prototype的原型是A.prototype -
Polyfill 或兼容性处理:在旧环境中模拟
Object.getPrototypeOf时,可降级使用obj.__proto__(仅作兜底)

















