object.getprototypeof()是获取对象原型的标准方法,返回其内部[[prototype]];它只接受对象类型,对null或原始值抛typeerror,且比非标准的__proto__更安全可靠。

Object.getPrototypeOf() 是 JavaScript 中获取对象原型的标准方法,它返回指定对象的内部 [[Prototype]](即其原型对象),也就是该对象通过 new、Object.create() 或字面量等方式继承所指向的那个对象。
基本用法:直接传入目标对象
语法很简单:Object.getPrototypeOf(obj)。只要传入一个对象,就能拿到它的原型:
- 普通对象字面量的原型是
Object.prototype - 数组的原型是
Array.prototype - 函数的原型是
Function.prototype
例如:
const obj = {};console.log(Object.getPrototypeOf(obj) === Object.prototype); // true
const arr = [];
console.log(Object.getPrototypeOf(arr) === Array.prototype); // true
和 __proto__ 的区别
Object.getPrototypeOf() 是标准、安全、推荐的方式;而 obj.__proto__ 是非标准但被广泛支持的访问器属性,不建议在生产代码中使用。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
__proto__可读可写,容易误改原型链,影响行为一致性 -
Object.getPrototypeOf()只读,语义清晰,兼容性好(ES5+) - 对于 null 或原始值(如字符串、数字),
Object.getPrototypeOf()会抛出 TypeError;__proto__在原始值上可能静默返回undefined或自动装箱,行为不一致
配合 instanceof 和 isPrototypeOf 判断继承关系
拿到原型后,可以进一步验证继承结构:
function Animal() {}function Dog() {}
Dog.prototype = Object.create(Animal.prototype);
const dog = new Dog();
const dogProto = Object.getPrototypeOf(dog);
console.log(dogProto === Dog.prototype); // true
console.log(Animal.prototype.isPrototypeOf(dog)); // true
console.log(dog instanceof Animal); // true
注意 null 和原始值的边界情况
只有对象类型才能有原型。对 null、undefined、字符串字面量等调用会报错:
Object.getPrototypeOf(null); // TypeErrorObject.getPrototypeOf("hello"); // TypeError
Object.getPrototypeOf(42); // TypeError
如果需要安全获取,可先用 typeof 或 Object.prototype.toString 判断类型,或用 Object(obj) 强制包装(但要注意这会改变原意)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










