Object.getPrototypeOf() 是获取对象直接原型的标准方法,返回其内部[[Prototype]]指向的对象;参数必须为对象,否则抛出TypeError,且不支持null/undefined。

Object.getPrototypeOf() 是 JavaScript 中获取对象原型(即其内部 [[Prototype]] 指向的对象)的标准方法。它返回该对象的直接原型,也就是通过 new 构造、Object.create() 或类继承等方式设定的那个“上一级”对象。
基本用法:获取任意对象的原型
调用方式很简单:Object.getPrototypeOf(obj),参数必须是对象(包括数组、函数、日期等引用类型),传入原始值(如字符串、数字)会抛出 TypeError。
- 普通对象:其原型通常是
Object.prototype - 数组:原型是
Array.prototype - 函数:原型是
Function.prototype - 通过
class或构造函数创建的实例:原型是对应构造函数的prototype对象
常见使用场景示例
比如判断一个对象是否是某个类型的实例,或检查原型链结构:
const arr = [1, 2, 3];
console.log(Object.getPrototypeOf(arr) === Array.prototype); // true
function Person() {}
const p = new Person();
console.log(Object.getPrototypeOf(p) === Person.prototype); // true
class Animal {}
const dog = new Animal();
console.log(Object.getPrototypeOf(dog) === Animal.prototype); // true
与 __proto__ 的区别
Object.getPrototypeOf() 是标准、安全、推荐的方式;而 obj.__proto__ 是非标准的访问器属性(尽管大多数引擎支持),不建议在生产代码中使用。两者行为相似,但 __proto__ 可读可写,容易误改原型,且在严格模式下对原始值取值会报错,而 Object.getPrototypeOf() 更健壮。
立即学习“Java免费学习笔记(深入)”;
注意边界情况
以下情况需特别留意:
- 传入
null或undefined会报错,必须确保参数是对象 - 空对象
{}的原型仍是Object.prototype - 用
Object.create(null)创建的对象没有原型,Object.getPrototypeOf()返回null - 不能用于获取函数的
prototype属性本身(那是函数作为构造器时供实例继承的),而是获取该函数实例的原型


















