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

Object.getPrototypeOf() 是 JavaScript 中获取对象原型(即其内部 [[Prototype]])的标准方法,返回该对象的直接原型对象(通常是构造函数的 prototype 属性),如果不存在则返回 null。
基本用法:获取对象的直接原型
语法很简单:
-
Object.getPrototypeOf(obj)—— 参数必须是对象(包括数组、函数、普通对象等) - 返回值是
obj的原型对象,也就是obj.__proto__指向的那个对象(但推荐用getPrototypeOf而非__proto__,因后者是非标准且已废弃的访问方式)
例如:
const obj = {};console.log(Object.getPrototypeOf(obj) === Object.prototype); // true
const arr = [1, 2];
console.log(Object.getPrototypeOf(arr) === Array.prototype); // true
与构造函数 prototype 的关系
对于通过构造函数创建的实例,其原型通常等于该构造函数的 prototype 属性:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const p = new Person('Alice');
console.log(Object.getPrototypeOf(p) === Person.prototype); // true
console.log(Person.prototype.constructor === Person); // true(默认情况下)
处理 null 和原始值时的注意事项
Object.getPrototypeOf() 只接受对象类型。传入原始值(如字符串、数字、布尔值)会先被包装成对应对象,再取其原型;但传入 null 或 undefined 会直接报错:
-
Object.getPrototypeOf("hello")→ 返回String.prototype(字符串被自动包装) -
Object.getPrototypeOf(42)→ 返回Number.prototype -
Object.getPrototypeOf(null)→ TypeError(无法在 null 上调用此方法) -
Object.getPrototypeOf(undefined)→ 同样抛出 TypeError
安全做法是先用 typeof 或 Object.prototype.toString 判断是否为对象:
if (value == null || typeof value !== 'object') return null;
return Object.getPrototypeOf(value);
}
对比 __proto__ 和 getPrototypeOf
obj.__proto__ 是历史遗留属性,虽然多数环境支持,但它不是 ECMAScript 标准的一部分(ES6 中才被“标准化”为附录内容,但仍不推荐使用);而 Object.getPrototypeOf() 是标准、可靠、只读的方式。
- ✅ 推荐:
Object.getPrototypeOf(obj) - ⚠️ 避免:
obj.__proto__(可读可写,易引发意外修改原型链) - ❌ 不要:
obj.constructor.prototype(不可靠,因为constructor可能被改写)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










