Object.getPrototypeOf()是获取对象原型的标准方法,返回其[[Prototype]]指向的对象;参数为对象,原始值自动装箱,null/undefined抛错,无原型时返回null。

Object.getPrototypeOf() 是 JavaScript 中获取对象原型(即其内部 [[Prototype]] 指向的对象)的标准方法。它返回指定对象的直接原型,也就是该对象通过 new、Object.create() 或字面量等方式创建时所继承的那个对象。
基本用法:获取对象的直接原型
语法很简单:
Object.getPrototypeOf(obj)
其中 obj 是你要查询原型的对象。返回值是它的原型对象,如果该对象没有原型(比如 Object.create(null) 创建的对象),则返回 null。
- 对普通对象字面量,原型通常是
Object.prototype - 对数组,原型是
Array.prototype - 对函数,原型是
Function.prototype - 对用
class定义的实例,原型是对应类的prototype对象
常见使用场景和例子
比如:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const obj = {};<br>console.log(Object.getPrototypeOf(obj) === Object.prototype); // true<br><br>const arr = [1, 2, 3];<br>console.log(Object.getPrototypeOf(arr) === Array.prototype); // true<br><br>function Foo() {}<br>const f = new Foo();<br>console.log(Object.getPrototypeOf(f) === Foo.prototype); // true<br><br>class Bar {}<br>const b = new Bar();<br>console.log(Object.getPrototypeOf(b) === Bar.prototype); // true
注意:obj.__proto__ 虽然也能拿到原型,但它是非标准的旧属性(尽管被广泛支持),推荐优先使用 Object.getPrototypeOf()。
与 Object.setPrototypeOf() 配合使用
如果你想修改对象的原型,可以用 Object.setPrototypeOf(obj, prototype),但要注意性能影响和不可变性问题。一般只在特殊场景下使用,例如模拟继承或调试。
- 不建议频繁修改已有对象的原型
- 更推荐在创建时就确定原型关系,比如用
Object.create(proto) - ES6 的
class和extends本质也是基于原型链的设置
注意 null 和原始值的边界情况
Object.getPrototypeOf() 只接受对象类型参数。传入原始值(如字符串、数字、布尔值)会先被装箱为对应的包装对象,再取其原型:
Object.getPrototypeOf("hello") // String.prototype<br>Object.getPrototypeOf(42) // Number.prototype<br>Object.getPrototypeOf(true) // Boolean.prototype
但传入 null 或 undefined 会直接报错:TypeError。安全做法是先做类型判断或用可选链配合(需环境支持)。

















