object.getprototypeof用于安全获取对象原型,函数对象返回function.prototype,实例返回对应.prototype,object.prototype的原型为null,原始值需先包装为对象才能调用。

Object.getPrototypeOf 可以直接读取任何对象的原型(即其内部 [[Prototype]] 指向的对象),包括内置对象如 Array、String、Date 等的构造函数本身,以及它们的实例。
读取内置构造函数的原型
内置构造函数(如 Array、Object)本身是函数对象,它们的原型是 Function.prototype:
-
Object.getPrototypeOf(Array) === Function.prototype→true -
Object.getPrototypeOf(Date) === Function.prototype→true -
Object.getPrototypeOf(Object) === Function.prototype→true
这是因为所有函数(包括内置构造函数)都继承自 Function.prototype。
读取内置实例的原型
对内置类型的实例调用 Object.getPrototypeOf,返回对应的标准原型对象:
-
Object.getPrototypeOf([]) === Array.prototype→true -
Object.getPrototypeOf("") === String.prototype→true -
Object.getPrototypeOf(new Date()) === Date.prototype→true -
Object.getPrototypeOf({}) === Object.prototype→true
这和使用 obj.__proto__ 效果一致,但 Object.getPrototypeOf 是标准、安全、推荐的方式。
读取内置原型链顶端
继续向上追溯,可以到达原型链终点:
Object.getPrototypeOf(Array.prototype) === Object.prototypeObject.getPrototypeOf(Object.prototype) === null
注意:Object.prototype 的原型是 null,这是整个原型链的终点。
不能直接读取原始值的原型
原始类型(如字符串字面量、数字)没有原型——它们不是对象。但 JS 会临时包装成对象来访问方法:
-
Object.getPrototypeOf("hello")抛出TypeError(因为字符串字面量不是对象) - 正确做法是先转为包装对象:
Object.getPrototypeOf(new String("hello")) === String.prototype
所以操作前建议用 typeof 或 Object.prototype.toString.call 判断是否为对象类型。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











