Object.getPrototypeOf()是获取对象直接原型的标准方法,返回其[[Prototype]]指向的对象(如Array.prototype)或null;它安全只读,优于非标准可写的__proto__属性。

Object.getPrototypeOf() 是 JavaScript 中获取对象原型(即其内部 [[Prototype]])的标准方法,返回该对象的直接原型对象(通常是构造函数的 prototype 属性),如果不存在则返回 null。
基本用法:获取对象的原型
语法很简单:
Object.getPrototypeOf(obj)
其中 obj 是任意对象。它不会修改原对象,只读取其原型链上的上一级。
- 对普通对象(如字面量
{}或Object.create({})创建的),通常返回Object.prototype - 对数组,返回
Array.prototype - 对日期对象,返回
Date.prototype - 对自定义构造函数的实例,返回该构造函数的
prototype对象
与 __proto__ 的区别
Object.getPrototypeOf(obj) 是标准、推荐的方式;而 obj.__proto__ 是非标准(虽被广泛支持)且已不推荐使用的访问器属性。
立即学习“Java免费学习笔记(深入)”;
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
__proto__可读可写,容易误改原型,引发意外行为 -
Object.getPrototypeOf()安全、不可写,语义更清晰 - ES6+ 环境中应优先使用
Object.getPrototypeOf()
实际例子
看几个典型场景:
const arr = [1, 2, 3];
console.log(Object.getPrototypeOf(arr) === Array.prototype); // true
const obj = {};
console.log(Object.getPrototypeOf(obj) === Object.prototype); // true
function Person() {}
const p = new Person();
console.log(Object.getPrototypeOf(p) === Person.prototype); // true
// 原型链末端
console.log(Object.getPrototypeOf(Object.prototype)); // null
注意:不能对 null 或 undefined 调用,会抛出 TypeError。
配合 Object.setPrototypeOf() 和 Object.create() 使用
常用于手动构建或检查原型关系:
const parent = { sayHi() { return 'Hi'; } };
const child = Object.create(parent);
console.log(Object.getPrototypeOf(child) === parent); // true
// 检查是否继承自某个原型
function isPrototypeOf(base, obj) {
return Object.getPrototypeOf(obj) === base;
}
也可用于类型判断辅助(但通常更推荐 instanceof 或 constructor)。

















