Object.getPrototypeOf() 是获取对象原型的标准方法,直接读取[[Prototype]]返回其原型对象或null;它只读、可靠,替代了非标准的__proto__,且比constructor.prototype更准确。

Object.getPrototypeOf() 是 JavaScript 中获取对象原型的唯一标准方法,它直接读取对象内部的 [[Prototype]] 属性,返回其指向的原型对象(或 null),行为稳定、语义清晰、符合 ECMAScript 规范。
标准用法:传入对象,返回其直接原型
该方法接收一个参数——必须是对象(包括函数、数组、普通对象、class 实例等),返回它的直接原型:
-
Object.getPrototypeOf({})→Object.prototype -
Object.getPrototypeOf([])→Array.prototype -
Object.getPrototypeOf(new Date())→Date.prototype -
Object.getPrototypeOf(Object.create(null))→null -
Object.getPrototypeOf(function(){})→Function.prototype
与非标准方式的关键区别
它替代了已废弃的 __proto__ 属性,也比依赖 constructor.prototype 更可靠:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
__proto__是非标准遗留属性,可读可写,存在安全和性能风险;Object.getPrototypeOf()只读、不可枚举、严格模式下完全可用 -
obj.constructor.prototype不一定等于真实原型——constructor可被修改或丢失,结果不可信 - 对
null或undefined直接抛TypeError,便于及早发现错误;原始值(如"abc"、42)会自动装箱,返回对应包装类型的 prototype(如String.prototype)
常见实用场景
它常用于类型判断、原型链调试和跨环境兼容性处理:
立即学习“Java免费学习笔记(深入)”;
- 精准判断实例类型:
Object.getPrototypeOf(arr) === Array.prototype - 遍历原型链:
let p = obj; while (p) { console.log(p); p = Object.getPrototypeOf(p); } - 替代
instanceof在 iframe 等构造函数不共享的场景中做原型匹配 - 配合
Object.setPrototypeOf()构成完整的原型操作接口(读+写)
注意事项和边界情况
使用时需注意几个易错点:
- 不能对
null、undefined调用,否则报错;建议先校验:obj != null && typeof obj === 'object' - 不要对构造函数本身调用(如
Object.getPrototypeOf(Array)),那得到的是Function.prototype,不是你想查的“数组原型” - 箭头函数没有
prototype属性,但它仍是函数对象,其原型仍是Function.prototype - Proxy 对象上使用时,返回的是被代理目标的原型,而非 Proxy 自身的内部原型

















