object.getprototypeof是获取对象直接原型的标准安全方法,返回其[[prototype]]指向的对象;可逐级遍历原型链定位方法来源,需检查null终止循环,配合hasownproperty区分自有与继承属性。

Object.getPrototypeOf 是 JavaScript 中查看对象直接原型的可靠方法,比 __proto__ 更规范、更安全,特别适合在调试原型链时定位继承关系和方法来源。
看清对象的“上一级”是谁
每个对象(除 null)都有一个直接原型,Object.getPrototypeOf(obj) 就是获取这个原型对象。它返回的是该对象内部 [[Prototype]] 指向的那个对象,也就是 obj.__proto__ 的标准替代写法。
- 对普通对象,通常返回
Object.prototype - 对数组,返回
Array.prototype - 对函数,返回
Function.prototype - 对用 class 创建的实例,返回对应类的
prototype
逐级遍历原型链定位方法来源
当不确定某个方法来自哪一层原型时,可以用循环配合 Object.getPrototypeOf 向上追溯:
function tracePrototype(obj, methodName) {
let current = obj;
while (current) {
if (current.hasOwnProperty(methodName)) {
console.log(`Found ${methodName} on:`, current);
break;
}
current = Object.getPrototypeOf(current);
}
}
例如 tracePrototype([1,2], 'map') 会输出 Array.prototype,说明 map 定义在此处。
区分“自有属性”和“继承属性”
结合 hasOwnProperty 和 Object.getPrototypeOf,能清晰判断属性是否属于对象自身:
-
obj.hasOwnProperty('x')→ 属性是否在obj自身上 -
'x' in obj→ 是否在obj或其任意原型上 -
Object.getPrototypeOf(obj).hasOwnProperty('x')→ 是否在直接原型上
这种组合常用于调试意外覆盖或缺失的方法。
注意 null 原型链终点
原型链最终会到达 null —— 这是所有原型链的终点。调用 Object.getPrototypeOf(Object.prototype) 返回 null,再往上就报错。
- 务必在循环中检查
current === null避免无限循环 - 不要对
null或undefined调用该方法,会抛出 TypeError - 箭头函数没有
prototype,但仍有原型(Function.prototype),可用Object.getPrototypeOf查看
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











