object.getprototypeof() 是获取对象原型的标准方法,返回其内部[[prototype]]指向的对象;参数为任意对象,无原型时返回null,不可用于null/undefined,原始值会自动包装。

Object.getPrototypeOf() 是 JavaScript 中获取对象原型的标准方法,返回指定对象的原型(即其内部 [[Prototype]] 指向的对象)。
基本用法
语法很简单:
-
Object.getPrototypeOf(obj)—— 参数obj是任意对象(包括数组、函数、普通对象等) - 返回该对象的原型对象;如果对象没有原型(如
Object.create(null)创建的对象),则返回null
例如:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const obj = {};
console.log(Object.getPrototypeOf(obj) === Object.prototype); // true
const arr = [1, 2, 3];
console.log(Object.getPrototypeOf(arr) === Array.prototype); // true
const fn = function() {};
console.log(Object.getPrototypeOf(fn) === Function.prototype); // true
与 __proto__ 的区别
__proto__ 是非标准但被广泛支持的访问器属性,而 Object.getPrototypeOf() 是 ECMAScript 标准推荐的方式:
-
__proto__可读可写,存在安全和性能隐患,不建议在生产环境使用 -
Object.getPrototypeOf()只读、标准、可靠,是获取原型的首选方法 - 二者在大多数情况下返回相同结果,但
Object.getPrototypeOf()更严谨(比如对某些内置对象或冻结对象更稳定)
常见使用场景
常用于类型判断、原型链遍历、框架开发或调试中:
- 判断对象是否继承自某个构造函数的原型:
Object.getPrototypeOf(obj) === MyConstructor.prototype - 沿原型链向上查找某个属性或方法是否存在:
let proto = Object.getPrototypeOf(obj); while (proto) { if (proto.hasOwnProperty('method')) break; proto = Object.getPrototypeOf(proto); } - 检查是否为纯对象(排除数组、日期、正则等):
Object.getPrototypeOf(obj) === Object.prototype
注意点
以下情况需特别留意:
- 不能对
null或undefined调用,会抛出TypeError - 原始值(如字符串、数字、布尔)会被自动包装,返回对应包装对象的原型:
Object.getPrototypeOf("hello") === String.prototype - 箭头函数没有自己的
this和prototype,但仍有原型:Object.getPrototypeOf(() => {}) === Function.prototype
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










